【发布时间】:2019-05-08 03:36:13
【问题描述】:
我对 R 中的地图函数和波浪号运算符 ´~´ 有疑问
为什么这段代码只能这样工作:
iris_unique <- map(iris, ~length(unique(.)))
而不是像这样
iris_unique <- map(iris, length(unique(iris$Sepal.Length)))
提前致谢
【问题讨论】:
标签: r
我对 R 中的地图函数和波浪号运算符 ´~´ 有疑问
为什么这段代码只能这样工作:
iris_unique <- map(iris, ~length(unique(.)))
而不是像这样
iris_unique <- map(iris, length(unique(iris$Sepal.Length)))
提前致谢
【问题讨论】:
标签: r
假设您正在谈论来自包purrr 的map,此函数旨在将函数映射到向量上。
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 被转换为函数 function(x){x[35]},因此最终结果是提取iris 的第 35 个观察值。
另一方面,文档还描述了它如何将公式转换为函数。据此,公式~length(unique(.)) 被翻译成函数function(x){length(unique(x))}。由于这是一个函数,因此将它映射到列表或向量上非常有意义。
【讨论】: