map [df]内部的[[]参数是什么意思?

时间:2019-08-16 16:26:54

标签: purrr

我想出了以下使用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行数据帧的列。

1 个答案:

答案 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"))