如何在R中遍历一个列表

33

我有一个列表,假设是这样的:

dataSet$mixed_bag <- list("Hello", c("USA", "Red", "100"), c("India", "Blue", "76"))

我想遍历这个列表并根据列表中的内容创建新的变量。伪代码如下所示:

foreach row in dataSet$mixed_bag {
    if (sapply(dataSet$mixed_bag, length) == 3) {
        dataSet$country <- dataSet$mixed_bag[[row]][1];
        dataSet$color <- dataSet$mixed_bag[[row]][2];
        dataSet$score <- dataSet$mixed_bag[[row]][3];
    } else if (sapply(dataSet$mixed_bag, length) == 2) {
       #Do something else
    } else {
       # Do nothing
    }
}
请建议我如何在R中完成这个任务。

你试过使用 lapply 吗? - zx8754
我做了。我是R的新手,所以不知道如何使用迭代变量(在这种情况下:row)来构建正确的语法。 - user3422637
你能否在帖子中添加 dput(dataSet) 的输出结果? - zx8754
1
这真的取决于您想在循环内部执行什么操作。您是不是想写 length(dataSet$mixed_bag[[row]]) 而不是 sapply(dataSet$mixed_bag, length)if 语句中的条件写法没有意义,因为它将一个向量与一个值进行比较,在这种情况下,您将收到警告,只使用了向量的第一个元素。 - konvas
是的,我指的是length(dataSet$mixed_bag[[row]])。 - user3422637
1个回答

56

像这样的吗?

dataList <- list("Hello", c("USA", "Red", "100"), c("India", "Blue", "76"))
for(i in dataList)
  {print(i)}

返回:

[1] "Hello"
[1] "USA" "Red" "100"
[1] "India" "Blue"  "76"   
或者:
for(i in dataList)
  {
  for(j in i)
  {print(j)}
  }

返回:

[1] "Hello"
[1] "USA"
[1] "Red"
[1] "100"
[1] "India"
[1] "Blue"
[1] "76"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接