从r中的其他向量自动生成变量列表

从r中的其他向量自动生成变量列表,r,list,vector,R,List,Vector,我有一个107个dna序列(列)的矩阵,每个10个碱基长(行)。我还有一个称为nSamples的种群频率向量,还有一个称为dnapop的种群名称向量。我想自动创建一个嵌套列表,分别包含前27个序列作为dna1,下27个序列作为dna2,下17个序列作为dna3……等等,直到所有107个序列都在列表中各自的总体中。 这需要是动态的,因为种群数量和dna序列随着应用的不同而变化: $dna1 $dna1$'1' [1] “g”“t”“g”“a”“t”“t”“c”“c”“g”“g” $dna1$'2'

我有一个107个dna序列(列)的矩阵,每个10个碱基长(行)。我还有一个称为nSamples的种群频率向量,还有一个称为dnapop的种群名称向量。我想自动创建一个嵌套列表,分别包含前27个序列作为dna1,下27个序列作为dna2,下17个序列作为dna3……等等,直到所有107个序列都在列表中各自的总体中。 这需要是动态的,因为种群数量和dna序列随着应用的不同而变化:

$dna1

$dna1$'1'

[1] “g”“t”“g”“a”“t”“t”“c”“c”“g”“g”

$dna1$'2'

[1] “g”“t”“g”“a”“t”“t”“c”“c”“g”“g”

等等,直到

$dna1$'27'

[1] “g”“t”“g”“a”“t”“t”“c”“c”“g”“g”

然后转到dna2,列出其27个序列,然后是dna3,列出其17个序列

dna <- matrix(data=sample(c("a","g","c","t"),1070,replace=T),nrow=10,ncol=107)
nSamples <- c(27,27,17,12,1,10,3,1,6,3)
dnapops <- c("dna1","dna2","dna3","dna4","dna5","dna6","dna7","dna8","dna9","dna10")

dna我们可以用“nSamples”复制“nSamples”序列,并
split
使用该序列,根据序列索引提取列,然后通过
col
进行
split

lst <- lapply(split(seq_len(ncol(dna)),rep(seq_along(nSamples), nSamples)), 
              function(i) {x1 <- dna[,i, drop=FALSE]
                    split(x1, col(x1)) })
lengths(lst)
# 1  2  3  4  5  6  7  8  9 10 
#27 27 17 12  1 10  3  1  6  3 
lst[[1]][1:5]
#$`1`
#[1] "g" "a" "c" "c" "c" "t" "g" "t" "t" "g"

#$`2`
#[1] "c" "g" "c" "c" "g" "t" "a" "a" "c" "a"

#$`3`
#[1] "a" "c" "c" "a" "a" "c" "a" "c" "c" "a"

#$`4`
#[1] "g" "a" "g" "a" "t" "a" "c" "c" "c" "t"

#$`5`
#[1] "g" "g" "g" "a" "a" "a" "g" "g" "g" "g"

lst我们可以用“nSamples”复制“nSamples”序列,并
split
使用该序列,根据序列索引提取列,然后通过
col
进行
split

lst <- lapply(split(seq_len(ncol(dna)),rep(seq_along(nSamples), nSamples)), 
              function(i) {x1 <- dna[,i, drop=FALSE]
                    split(x1, col(x1)) })
lengths(lst)
# 1  2  3  4  5  6  7  8  9 10 
#27 27 17 12  1 10  3  1  6  3 
lst[[1]][1:5]
#$`1`
#[1] "g" "a" "c" "c" "c" "t" "g" "t" "t" "g"

#$`2`
#[1] "c" "g" "c" "c" "g" "t" "a" "a" "c" "a"

#$`3`
#[1] "a" "c" "c" "a" "a" "c" "a" "c" "c" "a"

#$`4`
#[1] "g" "a" "g" "a" "t" "a" "c" "c" "c" "t"

#$`5`
#[1] "g" "g" "g" "a" "a" "a" "g" "g" "g" "g"

lst几乎可以工作,只是现在dna序列被合并到列表的每个部分。如何改变它,使之成为每个dna样本的列表?i、 e.dna1有27个独立的DNA,dna2有27个独立的DNA。。。。谢谢代码似乎不起作用。碱基的顺序不确定conserved@user3651829我更新了帖子,请检查这是否是你想要的wanted@user3651829您的原始矩阵
dna
基于
sample
,您还没有设定任何种子。基本上,您为重复27次而显示的输出并不清楚,因为“dna”中的前27列具有不同的值。@user3651829同样,这里我按列的顺序进行拆分,即“dna”中的前27列将是第一个
列表
元素(再次拆分为向量),第二个27列构成第二个
列表
元素,依此类推。否则,重复序列就没有意义了。这几乎起作用了,只是现在dna序列被合并到了列表的每个部分。如何改变它,使之成为每个dna样本的列表?即dna1有27个单独的dna,dna2有27个单独的dna代码似乎不起作用。基的顺序不正确conserved@user3651829我更新了帖子,请检查这是否是你想要的wanted@user3651829您的原始矩阵
dna
基于
sample
,您没有设置任何种子。基本上,您为重复
“g”“t”“g”“a”“t”“t”“c”而显示的输出“c”“g”“g”
27次不清楚,因为“dna”中的前27列具有不同的值。@user3651829同样,这里我按列的顺序进行拆分,即“dna”中的前27列将是第一个
列表
元素(再次拆分为向量),第二个27列构成第二个
列表
元素,依此类推。否则,重复序列就没有意义了。