【问题标题】:Tilde Operator in map function地图功能中的波浪号运算符
【发布时间】:2019-05-08 03:36:13
【问题描述】:

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

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

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

而不是像这样

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

提前致谢

【问题讨论】:

    标签: r


    【解决方案1】:

    假设您正在谈论来自包purrrmap,此函数旨在将函数映射到向量上。

    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))}。由于这是一个函数,因此将它映射到列表或向量上非常有意义。

    【讨论】:

      猜你喜欢
      • 2012-02-26
      • 2012-01-08
      • 2011-11-04
      • 2019-05-17
      • 2012-04-22
      相关资源
      最近更新 更多