首页 > 解决方案 > 地图功能中的波浪号运算符

问题描述

我对 R 中的 map 函数和波浪号运算符 '~' 有疑问

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

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

而不是例如这样

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

提前致谢

标签: r

解决方案


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(),试图理解它。文档说,如果为函数参数传递一个“字符向量、数字向量或列表,它将被转换为提取函数”,这意味着它35被转换为函数function(x){x[35]},因此最终结果是提取第 35个的观察iris

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


推荐阅读