ble*_*lep 5 loops for-loop r dataframe
我认为这是一个初学者的问题,但我似乎没有合适的词汇表来进行有效的Google搜索.
我有一个data.frame,final
其中包含一个列表clusters
,每个列表都是一个字符串列表.
我想迭代每个集群中的字符串列表:for循环中的for循环.
for (j in final$clusters){
for (i in final$clusters$`j`){
print final$clusters$`j`[i]
}
}
Run Code Online (Sandbox Code Playgroud)
j
对应于中的列表clusters
,并i
对应于中的项目clusters[j]
我试图通过使用每个集群的长度来做到这一点,我认为它会是这样的length(final$clusters[1])
,但它给出1,而不是列表的长度.
另外,final$clusters[1]
给$'1',在下一行,给出集群1中的所有字符串.
谢谢.
编辑:dput(str(final))
按要求输出:
List of 2
$ clusters :List of 1629
..$ 1 :
..$ 2 :
..$ 3 :
..$ 4 :
..$ 5 :
..$ 6 :
..$ 7 :
..$ 8 :
..$ 9 :
..$ 10 :
.. [list output truncated]
$ cluster_stats: num [1:1629, 1:6] 0.7 0.7 0.7 0.7 0.7 0.7 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:1629] "1" "2" "3" "4" ...
.. ..$ : chr [1:6] "min" "qu1" "median" "mean" ...
NULL
Run Code Online (Sandbox Code Playgroud)
我认为你混淆了 alist
和 a data.frame
。我猜你的最终对象是一个列表。
要迭代列表,您可以使用rapply
. 它是 lapply 的递归版本。
例如:
## I create some reproducible example
cluster1 <- list(a='a',b='b')
cluster2 <- list(c='aaa',d='bbb')
clusters <- list(cluster1,cluster2)
final <- list(clusters)
Run Code Online (Sandbox Code Playgroud)
所以使用rapply
rapply(final,f=print)
[1] "a"
[1] "b"
[1] "aaa"
[1] "bbb"
a b c d
"a" "b" "aaa" "bbb"
Run Code Online (Sandbox Code Playgroud)
OP编辑后更新
使用lapply
,我循环遍历列表的名称。对于每个名称,我使用[[
([
如果您想获取文件的名称和heder,则可以使用)获取元素列表,然后使用write.table
. 这里我使用列表中元素的名称来创建文件名。在您的情况下,您的文件名将是数字。(1.txt,...)
lapply(names(final$clusters),
function(x)
write.table(x=final$clusters[[x]],
file=paste(x,'.txt',sep='')))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16783 次 |
最近记录: |