我对R中的地图函数和波浪号运算符´〜´有疑问
为什么这段代码只能这样工作:
iris_unique <- map(iris, ~length(unique(.)))
而不是像这样
iris_unique <- map(iris, length(unique(iris$Sepal.Length)))
预先感谢
答案 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(.))
。由于这是一个函数,因此将其映射到列表或向量上非常有意义。