我试图计算5个变量s1 vs s3,s1 vs s4,s1 vs s5,s2 vs s3,s2 vs s4,s2 vs s5
的字符串之间成对差异的数量s1 <- unlist(strsplit('TGTAGCAACGGATTCCACCCATATGGGCTCAGCAGGCAGGTCCTGGATTGTTTGCT',''))
s2 <- unlist(strsplit('TGTAACAACGAATTCCATCCATATGGGCTCAGCAGGCAGGTCCTGGACTATTTGCT',''))
s3 <- unlist(strsplit('TGTAACGATGGGTCCTGCTTACGCGGGTTCAGTAGGTAAATTCTAGGCCGCCTATT',''))
s4 <- unlist(strsplit('TGTAACAACGGATTCCACCCATATGGGCTCAGCAGGCAGGTCCTGGACTGTTTGCT',''))
s5 <- unlist(strsplit('TGTAACGACGGGCCCTGCTTACGCGGGTTCAGTAGGTAAATTCTGGGCCGCTTATT',''))
for(i in 1:2)
{
for(j in 3:5){
diff(i.j) <- sum(mapply(function(x,y) sum(x!=y),s(i),s(j)))
}
}
答案 0 :(得分:0)
s(i)无法使用你可能会尝试
的get(粘贴( “S”,I,九月= “”))
你的diff(i.j)也有同样的问题。您可以调用您的对象diff_i.j或其他任何东西,但不能使用括号。
答案 1 :(得分:0)
因此,保持你的变量和风格,我想你想要这样的东西:
s1 <- unlist(strsplit('TGTAGCAACGGATTCCACCCATATGGGCTCAGCAGGCAGGTCCTGGATTGTTTGCT',''))
s2 <- unlist(strsplit('TGTAACAACGAATTCCATCCATATGGGCTCAGCAGGCAGGTCCTGGACTATTTGCT',''))
s3 <- unlist(strsplit('TGTAACGATGGGTCCTGCTTACGCGGGTTCAGTAGGTAAATTCTAGGCCGCCTATT',''))
s4 <- unlist(strsplit('TGTAACAACGGATTCCACCCATATGGGCTCAGCAGGCAGGTCCTGGACTGTTTGCT',''))
s5 <- unlist(strsplit('TGTAACGACGGGCCCTGCTTACGCGGGTTCAGTAGGTAAATTCTGGGCCGCTTATT',''))
strList <- rbind(s1,s2,s3,s4,s5)
diff <- matrix(nrow=2, ncol=3)
for(i in 1:2) {
for(j in 1:3) {
diff[i,j] <- sum(strList[i,] != strList[j+2,])
}
}
答案 2 :(得分:0)
虽然您可以在循环中使用get
来检索变量,但最好将数据放入某个结构中。
在这里,您有两个逻辑结构,而不是一个,而您正在制作两个集合的外部产品。 outer
对外部产品很有用,它要求两个逻辑输入是单独的对象。
以下是您要比较的两个向量:
a <- c('TGTAGCAACGGATTCCACCCATATGGGCTCAGCAGGCAGGTCCTGGATTGTTTGCT',
'TGTAACAACGAATTCCATCCATATGGGCTCAGCAGGCAGGTCCTGGACTATTTGCT')
b <- c('TGTAACGATGGGTCCTGCTTACGCGGGTTCAGTAGGTAAATTCTAGGCCGCCTATT',
'TGTAACAACGGATTCCACCCATATGGGCTCAGCAGGCAGGTCCTGGACTGTTTGCT',
'TGTAACGACGGGCCCTGCTTACGCGGGTTCAGTAGGTAAATTCTGGGCCGCTTATT')
这是base
中的一个表达式,它在函数中进行字符串分割。传递给outer
的函数必须进行矢量化,因此mapply
用于循环数据:
outer(a, b, FUN=function(a, b)
mapply(function(x, y)
sum(strsplit(x, '')[[1]] != strsplit(y, '')[[1]])
, a, b
)
)
[,1] [,2] [,3]
[1,] 26 2 24
[2,] 27 3 25
计算的是字符串对之间的汉明距离。包stringdist
使得它更具可读性(并且可能更快):
outer(a, b, FUN=stringdist, method='hamming')
[,1] [,2] [,3]
[1,] 26 2 24
[2,] 27 3 25
stringdist
的作者预测你会想要这样做,所以提供了一个功能:
stringdistmatrix(a, b, method="hamming")