【问题标题】:Use lists/dataframes as items in for-loops in R使用列表/数据框作为 R 中 for 循环中的项目
【发布时间】:2019-02-28 16:04:48
【问题描述】:

我很确定这是基本的东西,但我无法通过谷歌搜索找到答案。所以我的问题:

我想在列表或数据框列表上使用 for 循环。但是当你使用 list[i] 时,你会得到数据框中的所有值,而不是它自己的数据框。谁能告诉我如何正确编码?

代码示例:

a<-data.frame(seq(1:3),seq(3:1))
b<-data.frame(seq(1:3),seq(3:1))
l<-c(a,b)

然后 l[1] 返回:

> l[1]
$seq.1.3..
[1] 1 2 3

我希望它只返回:a

【问题讨论】:

  • 使用[[ 而不是[[ 拉取子列表,[[ 拉取特定元素。
  • 如果您可以发布数据样本,或使用输入和预期输出创建自己的数据,我们可以更轻松地为您提供帮助。
  • 我认为当你有 test[i-2] 时,你的意思是 test[j-2]。您还有一个问题,即每个i 都会覆盖test[1]。也许您的意思是使用 "矩阵 "a"" 重新生成 test,它会显示在您的文本中,但不会显示在您的代码中?
  • 如果没有可重现的数据,我们真的无法为您进行任何测试或调试。我们没有comb.rdata,我们无法创建dat 或您的任何subsets 或wholeyear 等。如果您发布一个小的、可重复的示例一点数据(最好是复制/粘贴),我们可以更轻松地为您提供帮助。 dput() 非常适合制作数据复制/粘贴。只需 2 个子集,每个子​​集有 2 或 3 列和 6 行,就足以说明问题并展示解决方案。如果您可以显示小样本输入的预期输出,这也很有帮助。
  • 抱歉,更新后更容易理解我想要做什么

标签: r dataframe for-loop


【解决方案1】:

你可以使用list函数:

a<-data.frame(1:3,1:3)
b<-data.frame(3:1,3:1)

l<-list(a,b)

并用双括号[[访问它的值:

l[[1]]
l[[2]]

Ps:seq(1:3)seq(3:1) 输出相同的值,所以我使用了1:33:1。 :)

【讨论】:

  • @Gregor 当我使用str(c(mtcars, iris)) 时,它给了我一个向量列表,而不是data.frames。我错过了什么吗?感谢您的信息!
  • 不,我的错。我刚刚做了class(c(mtcars, iris)) 并做了一个错误的假设。 (可能需要澄清一下,c(a, b) 是一个实际列表,但它是所有数据帧中所有列的列表。list(a, b) 是我们想要的,一个数据帧列表。)
  • @Gregor 感谢您指出实际列表,我对此一无所知。我会更新我的答案。 :)
猜你喜欢
  • 1970-01-01
  • 2014-03-31
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
相关资源
最近更新 更多