首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >点到do.call函数的magrittr管道

点到do.call函数的magrittr管道
EN

Stack Overflow用户
提问于 2021-08-12 13:29:02
回答 2查看 85关注 0票数 1

.被间接传输到像do.call这样的函数时,magrittr看不到.

该示例将给出一个错误,因为点是不可见的。

代码语言:javascript
复制
airquality %>% do.call("mean", list(x = .$Ozone, na.rm = TRUE))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-12 13:44:52

除非主函数(这里是do.call )有一个点作为参数,否则管道会将左边插入到参数1中。在表达式中使用点不算数。

大括号可以用来禁用自动插入,可以使用with使with而不是do.call成为主函数,使用magrittr的%$%管道或使用显式执行您想要的操作的函数。

(请注意,如果在其参数中有任何NA,则mean将给出NA的结果;要取消NA的结果,请将na.rm=TRUE作为参数添加到mean --未显示。)

代码语言:javascript
复制
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中引入|>管道后,这些功能可以工作,但不能与上面的其他功能类似:

代码语言:javascript
复制
airquality |> with(do.call("mean", list(x = Ozone)))

airquality |> (\(.) do.call("mean", list(x = .$Ozone)))()
票数 3
EN

Stack Overflow用户

发布于 2021-08-12 13:44:28

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

代码语言:javascript
复制
list(., x = .$Ozone)

使用with解决了这个问题。

代码语言:javascript
复制
airquality %>% with(., do.call("mean", list(x = Ozone, na.rm = TRUE)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68758420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档