首页 > 解决方案 > 为什么点在 base::split(.$cyl) 中?

问题描述

在 R for data science第 21.5.1 章中,此语法用于基本函数split(.$cyl)。为什么点在.$cyl. 该包purrr具有占位符(. 或)的语法.xpurrr不涉及。

library(tidyverse)
mtcars %>% split(f=.$cyl) 

标签: rtidyverse

解决方案


purrr 使用的占位符语法也被 magrittr 管道 ( %>%) 使用。默认情况下,管道将左侧 (LHS) 作为右侧 (RHS) 函数的第一个参数传递。在这种情况下.,RHS 表达式中不需要。

例如:

mtcars %>% str()

工作正常,相当于:

mtcars %>% str(.)

在这种.情况下完全没有必要,因为 LHS( mtcars)传递给 的第一个参数str()

所以这与以下内容相同:

str(mtcars)

但在任何其他情况下,您需要使用.标记在 RHS 中应该通过 LHS 的位置。

您的示例有点复杂,因为 LHS ( mtcars) 在 RHS ( 函数split()) 中传递了两次:

  • 首先,作为第一个参数(所以.不需要)
  • 然后,再次作为第二个参数的一部分(所以.在这种情况下你确实需要 a )。
mtcars %>% split(f = .$cyl)

可以写成(尽管那是不必要的):

mtcars %>% split(x = ., f = .$cyl)

因此实际上等同于:

split(x = mtcars, f = mtcars$cyl)

推荐阅读