我遇到如下问题。
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$len10
或lst$len11
等。
答案 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='')))