我是R的新手,我有以下代码:
Permutation<-function(sequence,k)
{
List <- list()
numberkmers <-length(sequence)-k+1
for (i in 1:numberkmers)
{
j <-i+k-1
kmer <- sequence[i:j]
kmertmp <- sequence[i:j]
kmer <-sort(kmer)
perlist <-c()
for (l in 1:k)
{
index <- which(kmer==kmertmp[l])
perlist <- c(perlist,index)
}
List[[i]] <- perlist
}
return(List)
}
sequence <- qnorm(runif(1000),100,15)
ListPer <- Permutation(sequence,4)
此代码根据序列中k个数字的顺序产生排列,即如果序列为{39,12,40,18,20}
和k=4
则第一个排列为3,1,4,2,具体取决于排序顺序39,12,40,20
..
我有两个问题:
ListPer
是序列中出现的所有排列(ievector)的列表,我想将表函数应用于列表中的所有排列,因此最终结果将为:
P : occur
1,2,3,4:34
2,3,4,1:25
2,1,3,4:15
结果表是否用作查找表,因此我可以检索任何统计分析的一个排列的出现次数。
非常感谢
答案 0 :(得分:1)
您可以使用table()
选项。您可以连接值并进行计数
tt<-table(sapply(ListPer, paste, collapse=":"))
tt["2:1:4:3"]
# [1] 33
或者你可以创建一个4D计数数组
tt<-table(data.frame(do.call(rbind, ListPer)))
然后你可以用
计算出来tt["2","1","4","3"]
# [1] 33
请注意,这些是字符,因为“表格”索引会产生字符向量