【问题标题】:Intializing a list to contain dataframes in R初始化列表以包含 R 中的数据框
【发布时间】:2021-04-08 09:00:49
【问题描述】:

如何在 R 中创建一个空列表,以后可以使用数据框填充该列表?如果我不知道数据框的尺寸,这可能吗? 例如我想这样做:​combined 是一个数据框 year_wave 是一个包含 6 个字符串的数组。 我希望 empty_list[1] 成为组合数据集的子集,仅包含那些包含 year_wave[1] 中的字符串的列

empty_list[1]<-select(combined,contains(year_wave[1]))

【问题讨论】:

  • 也许:empty_list &lt;- list() 然后empty_list[1] &lt;- list(select(combined,contains(year_wave[1])))
  • 如果您创建一个小的可重现示例以及预期的输出,这将更容易提供帮助。阅读how to give a reproducible example

标签: r list dataframe


【解决方案1】:

要创建一个空的数据框列表,您可以使用 replicatedata.frame 参数。我在下面制作了一个代表。

replicate(3,data.frame())
#> [[1]]
#> data frame with 0 columns and 0 rows
#> 
#> [[2]]
#> data frame with 0 columns and 0 rows
#> 
#> [[3]]
#> data frame with 0 columns and 0 rows

reprex package (v2.0.0) 于 2021-04-08 创建

一个更完整的功能可以做你想做的事,可能是在下面的代码块中使用map 函数。 map 函数将函数应用于列表或数组的所有元素,因此我们可以使用每个字符串应用我们的选择标准。这将返回数据框列表。 (请注意,在 map 中,arg 1 是我们迭代的列表,arg 2 是我们调用的函数,任何额外的参数都完全传递给函数)

map(year_wave, ~(..2 %>% select(contains(.x)), combined  ))

【讨论】:

  • 感谢您的回复。您的地图代码中引用的“..2”和“.x”是什么?我没有遇到过“。”以这种方式在 R 中使用。你能澄清一下吗?
  • 在 map 函数中,当您定义函数时,输入使用您传递给 map 的其他参数。传递给 map 的列表可以引用为 .x,任何其他参数都可以传递为 .. 2.. 3 等。在 map 中,点本质上只是参数名称的一部分。
  • 如果 Map 中的 Arg 2 是一个函数,你调用的是什么函数? Arg 2 中的代码块是否只返回一个数据集?我不清楚 ..2 是什么意思——尽管我觉得你的策略是可行的。非常简洁!
  • 本质上被调用的函数是:`function(.x, ..2) { return(..2 %>% select(contains(.x))) } `~ notation是在 r 中使用的另一个函数的参数中定义函数的方式是的,函数确实只返回一个数据集
猜你喜欢
  • 2020-05-18
  • 2018-11-28
  • 2020-05-28
  • 1970-01-01
  • 2012-12-26
  • 2015-11-15
  • 2017-07-05
  • 2016-03-16
  • 1970-01-01
相关资源
最近更新 更多