R语言 map_df中的'['参数是什么意思?

8yparm6h  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(173)

我提出了以下使用purrr包在R中创建 Dataframe 的方法:

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行数据框的列。

8iwquhpp

8iwquhpp1#

[是子集运算符,你通常会看到它是这样写的:

x[index]

然而,在 *R中,每个运算符都是一个函数 *,[也一样。要将一个运算符作为普通函数调用,需要将其反引号引起来,否则R认为它应该被操作数包围。例如:
对于子集运算符,规则略有不同:它们的调用带有左括号和右括号,但运算符 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 = `[`

(In R你可以像任何其他对象一样给新的名字赋值函数。)
由于map_df处理公式的方式,上面的表达式也与

map_df(list, ~ .x[.y], c("name_1", "name_2"))

相关问题