在动态列表中的数据框内插入数据

时间:2017-12-29 08:51:57

标签: r

我遇到如下问题。

rept4<-"CGCCCCCTGCTGGCGACTAGGGCAACTGCAGGGTCCTCTTGCTCAAGGTGAGTGGCAGACGCCCACCTGCTGGCAGCCGGGGACACTGCAGGGCCCTCTTGCTTACTGTATAGTGGTGGCA"
rept4<-unlist(strsplit(rept4,""))

现在根据建议我有一个数据框列表如下。

i1 <- 5:15
lst <- lapply(i1, function(x)  data.frame(setNames(replicate(x,character(0)), 
                           paste0("C", seq_len(x))), stringsAsFactors = FALSE))
names(lst) <- paste0("len", i1)

我的问题是如何根据长度将数据放入循环内的每个数据帧中。

  for ( x in 5: 15){

 arr4len<-length(rept4)
 windowsize<-x
 numrows<-ceiling(arr4len/windowsize)
 k<-0
 for (i in 1:numrows){
  for(j in 1:windowsize){
    k<-k+1
    lst$lenx[i,j]<-rept4[k]
  }
 }
}

我尝试访问lst$lenx和第x个元素,例如lst$len10lst$len11等。

2 个答案:

答案 0 :(得分:0)

如果任务是将rept4拆分为data.frames列表,我将分两步拆分和创建data.frames:(1)将字符串拆分为长度为{{1}的子字符串},(2)将子串转换为data.frames

i1
rept4<-"CGCCCCCTGCTGGCGACTAGGGCAACTGCAGGGTCCTCTTGCTCAAGGTGAGTGGCAGACGCCCACCTGCTGGCAGCCGGGGACACTGCAGGGCCCTCTTGCTTACTGTATAGTGGTGGCA"
i1 <- 5:15
end <- cumsum(i1)
start <- end - i1 + 1L
lst <- lapply(stringr::str_sub(rept4, start, end), 
              function(x) 
                setNames(
                  as.data.frame(t(unlist(strsplit(x, ""))), 
                                stringsAsFactors = FALSE),
                paste0("C", seq_len(nchar(x))))
)
names(lst) <- paste0("len", i1)
lst

答案 1 :(得分:-1)

您的问题的一个解决方案是将字符串解析为变量名称,如本博文中所示:https://www.r-bloggers.com/converting-a-string-to-a-variable-name-on-the-fly-and-vice-versa-in-r/

使用您的代码我做了这个简化的例子:

for (x in 5: 15){
  print(eval(parse(text = paste("lst$len",x,sep=''))))
}

简而言之,您可以使用:eval(parse(text = paste("lst$len",x,sep='')))