首页 > 解决方案 > 我设计的函数没有循环输入序列(x)。它只返回第一个序列的输出

问题描述

我正在尝试这个,我没有得到所需的输出,对于不同的序列应该是不同的。

    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")

标签: r

解决方案


尝试使用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

Base R 更简单

这是一个不需要管道和 3 次调用的函数map。它的输出与上面相同。

oops <- function(x){
  y <- Peptides::aaComp(x)
  lapply(y, '[', 1, 'Number')
}

推荐阅读