当.被间接传输到像do.call这样的函数时,magrittr看不到.。
该示例将给出一个错误,因为点是不可见的。
airquality %>% do.call("mean", list(x = .$Ozone, na.rm = TRUE))发布于 2021-08-12 13:44:52
除非主函数(这里是do.call )有一个点作为参数,否则管道会将左边插入到参数1中。在表达式中使用点不算数。
大括号可以用来禁用自动插入,可以使用with使with而不是do.call成为主函数,使用magrittr的%$%管道或使用显式执行您想要的操作的函数。
(请注意,如果在其参数中有任何NA,则mean将给出NA的结果;要取消NA的结果,请将na.rm=TRUE作为参数添加到mean --未显示。)
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)))|>
在base R 4.1中引入|>管道后,这些功能可以工作,但不能与上面的其他功能类似:
airquality |> with(do.call("mean", list(x = Ozone)))
airquality |> (\(.) do.call("mean", list(x = .$Ozone)))()发布于 2021-08-12 13:44:28
因为list对未命名参数(...)是开放的,所以.转到第一个参数。这可以表示为
list(., x = .$Ozone)使用with解决了这个问题。
airquality %>% with(., do.call("mean", list(x = Ozone, na.rm = TRUE)))https://stackoverflow.com/questions/68758420
复制相似问题