【发布时间】:2011-10-20 18:52:09
【问题描述】:
我设法写了一个for loop 来比较以下向量中的字母:
bases <- c("G","C","A","T")
test <- sample(bases, replace=T, 20)
test 将返回
[1] "T" "G" "T" "G" "C" "A" "A" "G" "A" "C" "A" "T" "T" "T" "T" "C" "A" "G" "G" "C"
使用函数Comp()我可以检查一个字母是否与下一个字母匹配
Comp <- function(data)
{
output <- vector()
for(i in 1:(length(data)-1))
{
if(data[i]==data[i+1])
{
output[i] <-1
}
else
{
output[i] <-0
}
}
return(output)
}
导致;
> Comp(test)
[1] 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 1 0
这是有效的,但是对于大量数字来说它非常慢。为此我尝试了sapply()
Comp <- function(x,i) if(x[i]==x[i+1]) 1 else 0
unlist(lapply(test, Comp, test))
不幸的是,它不起作用... (Error in i + 1 : non-numeric argument to binary operator) 我无法弄清楚如何访问向量中的前一个字母以进行比较。 length(data)-1,“不比较”最后一个字母可能会成为问题。
谢谢大家的帮助!
干杯 幸运
【问题讨论】:
-
我改写了标题以更好地说明问题并供参考。您还应该知道 sapply/lapply 等 是 循环,尽管形式不同。另见stackoverflow.com/questions/2275896/…
-
谢谢,我是 R 和编程新手,对术语不太熟悉
标签: r vector string-comparison sapply