我想出了以下使用purrr包在R中创建数据帧的方法:
map_df(list, `[`, c("name_1", "name_2"))
我以前用它做过
list %>% map_df(~data.frame(name_1 = .x[["name_1"]], name_2 =.x[["name_2"]]))
任何人都可以解释[
参数或将我引向我可以使用的资源
谢谢
我已经签出了https://purrr.tidyverse.org/reference/map.html,但没有发现任何有用的东西。 list是一个包含n个元素的通用列表,每个元素都包含name_1和name_2元素,它们将成为我的n行数据帧的列。
答案 0 :(得分:2)
`[`
是子设置运算符。通常您会遇到这样写的内容:
x[index]
但是,在R中,每个运算符都是一个函数,而`[`
也不例外。要将运算符作为普通函数调用,您需要对它进行反引号引用,因为否则R认为它应该被操作数包围。例如:
1 + 1 # is the same as
`+`(1, 1)
2 == 3 $ is the same as
`==`(2, 3)
对于子集运算符,规则略有不同:它们用大括号括起来,但运算符 name 仅具有大括号:
x[1, 2] # is the same as
`[`(x, 1, 2)
iris[['Species']] # is the same as
`[[`(iris, 'Species')
现在。由于`[`
是一个函数(例如 all 运算符-参见上文),因此我们可以像其他任何函数一样将函数名称传递到map_df
中。认为以上
map_df(list, extract, c("name_1", "name_2"))
extract
被定义为
extract = function (x, index) {
x[index]
}
或简称为:
extract = `[`
(在R中,您可以将函数分配给新名称,就像其他任何对象一样。)
由于map_df
处理公式的方式,上述内容也与
map_df(list, ~ .x[.y], c("name_1", "name_2"))