Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中的data.frame中存储的列表上迭代_R_For Loop_Dataframe_Loops - Fatal编程技术网

在R中的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]

我认为这是一个初学者的问题,但我似乎没有合适的词汇来进行有效的谷歌搜索

我有一个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]

我试图通过使用每个集群的长度来实现这一点,我认为这类似于
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='')))