【问题标题】:How to apply table function to a list of vectors?如何将表函数应用于向量列表?
【发布时间】:2014-06-29 22:35:33
【问题描述】:

我是 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 的排序顺序..

我有两个问题:

  1. ListPer 是序列中发生的所有排列(即向量)的列表,我想将表函数应用于列表中的所有排列,因此最终结果将是:

    P   : occur
    

    1,2,3,4: 34

    2,3,4,1: 25

    2,1,3,4: 15

  2. 结果表是否用作查找表,以便我可以检索一个排列的出现次数以进行任何统计分析。

非常感谢

【问题讨论】:

  • 我认为您可以通过使用order(c(39,12,40,18,20)[1:4]) 获取您的“排列”值来节省一些麻烦。

标签: r


【解决方案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

请注意,这些是字符,因为“表”索引结果使用字符向量

【讨论】:

  • 并不是说很难将tt 转换为as.numeric :-)
  • tt 本身包含数值,只是对应于唯一观察到的级别的行名和列名是字符值。
  • 哎呀。对不起'回合
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多