如何在字符向量列表上使用seqinr :: computePI

时间:2020-10-21 06:36:38

标签: r strsplit

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

sample1        MAQSVNIQDQYLNQ
sample2        MAADRAQNLQDTFLNHV
sample3        MAERSQNLQ

我正在尝试使用computePI()库中的seqinr函数在第二列上执行计算。为此,我需要将第二列中的字符串转换为单个字符的向量,并将其用作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 = "")))

但是出现一个错误,告诉我输入不是字符串。我该如何解决?

2 个答案:

答案 0 :(得分:3)

您可以使用sapply

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

答案 1 :(得分:1)

您可以使用Vectorize

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

或者像Ronak Shah所示的sapply / lapply / vapplyvapply可能是最快的:

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)