【问题标题】:How to use seqinr::computePI on a list of character vectors如何在字符向量列表上使用 seqinr::computePI
【发布时间】:2020-10-21 06:36:38
【问题描述】:

这是输入数据的样子(代表性样本)。

sample1        MAQSVNIQDQYLNQ
sample2        MAADRAQNLQDTFLNHV
sample3        MAERSQNLQ

我正在尝试使用seqinr 库中的computePI() 函数对第二列执行计算。为此,我需要将第二列中的字符串转换为单个字符的向量,并将其用作computePI() 的输入。为此,我尝试使用strsplit()。它适用于单个字符串:

library(seqinr)
str <- c("MAQSVNIQDQYLNQ")
unlist(strsplit(str, split = ""))
#R> [1] "M" "A" "Q" "S" "V" "N" "I" "Q" "D" "Q" "Y" "L" "N" "Q"

接着是:

computePI(unlist(strsplit(str, split = "")))
#R> [1] 3.799404

将使用read.csv读取的输入数据保存到变量后:

data <- read.csv("filename", header = FALSE, sep = "\t")

我尝试了以下方法:

computePI(unlist(strsplit(data$V2, split = "")))

但是有一个错误告诉我输入不是字符串。我该如何解决这个问题?

【问题讨论】:

    标签: r strsplit


    【解决方案1】:

    你可以使用sapply

    sapply(strsplit(data$V2, split = ""), seqinr::computePI)
    

    【讨论】:

      【解决方案2】:

      你可以使用Vectorize:

      library(seqinr)
      VcomputePI <- Vectorize(computePI)
      VcomputePI(strsplit(dat$V2, split = ""))
      #R> [1] 3.799404 5.194135 5.753213
      

      sapply/lapply/vapplyRonak Shah 所示。 vapply 可能是最快的:

      vapply(strsplit(dat$V2, split = ""), computePI, 0.)
      #R> [1] 3.799404 5.194135 5.753213
      

      数据

      dat <- data.frame(
        V1 = paste0("sample", 1:3), 
        V2 = c("MAQSVNIQDQYLNQ", "MAADRAQNLQDTFLNHV", "MAERSQNLQ"), 
        stringsAsFactors = FALSE)
      

      【讨论】:

        猜你喜欢
        • 2012-09-05
        • 1970-01-01
        • 2018-12-08
        • 2021-04-04
        • 2014-09-16
        • 2019-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多