地图功能中的Tilde运算符

时间:2018-12-06 12:24:18

标签: r

我对R中的地图函数和波浪号运算符´〜´有疑问

为什么这段代码只能这样工作:

iris_unique <- map(iris, ~length(unique(.)))

而不是像这样

iris_unique <- map(iris, length(unique(iris$Sepal.Length)))

预先感谢

1 个答案:

答案 0 :(得分:3)

假设您正在谈论map包中的purrr,则此函数旨在将函数映射到向量上。

length(unique(iris$Sepal.Length))是一个特定值(标准iris数据集为35),因此

iris_unique <- map(iris, length(unique(iris$Sepal.Length)))

等同于

iris_unique <- map(iris, 35)

由于35不是函数,所以这可能不是您的意思。但是map()试图弄明白这一点。 The documentation说,如果您为函数参数传递了一个“字符向量,数字向量或列表,它将转换为提取器函数”,这意味着35被转换为函数{{ 1}},因此最终结果是提取function(x){x[35]}的第35个观测值。

另一方面,文档还描述了如何将公式转换为函数。据此,公式iris被转换为函数~length(unique(.))。由于这是一个函数,因此将其映射到列表或向量上非常有意义。