点到do.call函数的r-magrittr管道



.被间接传输到类似do.call的函数时,magrittr看不到.

由于点不可见,将给出错误的示例。

airquality %>% do.call("mean", list(x = .$Ozone, na.rm = TRUE))

除非有一个点作为主函数的参数(此处为do.call),否则管道将把左手边插入参数1。在表达式中使用点不算数。

大括号可用于禁用自动插入,with可用于使with而不是do.call成为主函数,使用magrittr的%$%管道或使用明确执行所需操作的函数。

(注意,如果参数中有任何NA,mean将给出NA的结果;要抑制NA,请添加na.rm=TRUE作为参数以表示——未显示。)

airquality %>% { do.call("mean", list(x = .$Ozone)) }
airquality %>% with(do.call("mean", list(x = Ozone)))
library(magrittr)
airquality %$% do.call("mean", list(x = Ozone))
# needs R 4.1+ . With earlier versions use function(.) in place of (.)
airquality %>% ((.) do.call("mean", list(x = .$Ozone)))

|>

使用|>管道引入底座R 4.1这些工作,但不是类似于上面的其他工作:

airquality |> with(do.call("mean", list(x = Ozone)))
airquality |> ((.) do.call("mean", list(x = .$Ozone)))()

因为list对未命名的参数(…)是开放的,所以.转到第一个参数。这可以表示为

list(., x = .$Ozone)

使用with解决了这个问题。

airquality %>% with(., do.call("mean", list(x = Ozone, na.rm = TRUE)))

最新更新