在R中的data.frame中存储的列表上迭代
我认为这是一个初学者的问题,但我似乎没有合适的词汇来进行有效的谷歌搜索 我有一个data.frame,在R中的data.frame中存储的列表上迭代,r,for-loop,dataframe,loops,R,For Loop,Dataframe,Loops,我认为这是一个初学者的问题,但我似乎没有合适的词汇来进行有效的谷歌搜索 我有一个data.frame,final,它包含一个集群列表,每个集群都是一个字符串列表 我想遍历每个集群中的字符串列表:for循环中的for循环 for (j in final$clusters){ for (i in final$clusters$`j`){ print final$clusters$`j`[i] } } j对应于clusters中的列表,i对应于clusters[j]
final
,它包含一个集群列表
,每个集群都是一个字符串列表
我想遍历每个集群中的字符串列表:for循环中的for循环
for (j in final$clusters){
for (i in final$clusters$`j`){
print final$clusters$`j`[i]
}
}
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
我认为这里的主要问题是,这里的迭代方式是错误的 我认为这样做会更好:
for (j in final$clusters){
for (i in final$clusters[j]){
print i
}
}
这是文件
对于循环:
对于子集:
祝你好运我想你把
列表
和数据框
搞混了。我猜你的最终目标是一个列表
要遍历列表,可以使用rappy
。它是Lappy的递归版本
例如:
## I create some reproducible example
cluster1 <- list(a='a',b='b')
cluster2 <- list(c='aaa',d='bbb')
clusters <- list(cluster1,cluster2)
final <- list(clusters)
按OP编辑后更新
使用lappy
,我循环遍历列表的名称。对于每个名称,我使用[[
(如果您想获得文件的名称和heder,您可以使用[
),然后我使用write.table
来编写文件。在这里,我使用列表中元素的名称来创建文件名。在您的情况下,您将使用文件名作为编号。(1.txt,…)
谢谢您的关注!但是,这并不能完全解决我的问题。(我会支持您的答案,但我没有这样做的声誉。对不起。)因此,
rapply
正在按照您所说的方式打印列表(感谢您的澄清)。但是,我想一次只打印一个列表(实际上,我希望使用sink
将每个集群打印到不同的文件中),但我无法使用@pipo98的帮助和您的帮助使print
工作:for(j in final$clusters){rappy(final$clusters[j],f=print)}
返回许多行的NULL
@dd3无需将rappy
与进行组合,因为rappy
将在列表中重复执行以获取页面。您可以输入dput(str(final))吗
并将其添加到您的问题中…问题是我一次只想对其中一个子列表执行此操作。在您的示例中,我只想获取cluster1
的输出,将其写入文件,然后对其他集群执行相同操作,每个集群都写入不同的文件。我已将您请求的输出添加到我的问题中。而谢谢你的帮助。
rapply(final,f=print)
[1] "a"
[1] "b"
[1] "aaa"
[1] "bbb"
a b c d
"a" "b" "aaa" "bbb"
lapply(names(final$clusters),
function(x)
write.table(x=final$clusters[[x]],
file=paste(x,'.txt',sep='')))