Моя разработанная функция не зацикливается на моем вводе последовательностей (x). Он возвращает вывод только первой последовательности

avatar
Hafiza Hira Bashir
8 августа 2021 в 16:42
43
1
1

Я пробую это, но не получаю требуемый вывод, который должен быть разным для разных последовательностей.

    oops <- function(x){
        aacom <- Peptides::aaComp(x)
        aacom
        c <- data.frame(aacom)
        y <- c %>% select(Number)
        Tiny_Number<- y[1,]
    return(Tiny_Number)
}

oops(c("GLFDIIKKIAESF","KWKLFKKIGAVLKVL")
Источник

Ответы (1)

avatar
Rui Barradas
8 августа 2021 в 17:22
1

Попробуйте с map, так как aaComp возвращает список.

library(Peptides)
library(dplyr)
library(purrr)

oops <- function(x){
  aacom <- Peptides::aaComp(x)
  aacom %>%
    map(~as.data.frame(.)) %>%
    map(~select(.  Number)) %>%
    map(~`[`(.  1, ))
}

oops(c("GLFDIIKKIAESF","KWKLFKKIGAVLKVL"))
#[[1]]
#[1] 3
#
#[[2]]
#[1] 2

Еще одна версия трубы.

oops <- function(x){
  aacom <- Peptides::aaComp(x)
  aacom %>%
    map(~as.data.frame(.) %>% select(.  Number) %>% `[`(.  1, ))
}

Base R проще

Вот функция без каналов и с 3 вызовами map. Его вывод такой же, как указано выше.

oops <- function(x){
  y <- Peptides::aaComp(x)
  lapply(y, '[', 1, 'Number')
}
IRTFM
9 августа 2021 в 02:22
1

Проголосуйте за чтение мыслей и базовое решение.