点到 do.call 函数的 magrittr 管道
magrittr pipe of dot to do.call function
当.
间接传递给do.call
等函数时,magrittr
看不到.
。
会给出错误的示例,因为点不可见。
airquality %>% do.call("mean", list(x = .$Ozone, na.rm = TRUE))
因为 list
对未命名参数 (...) 开放,所以 .
转到第一个参数。这可以表示为
list(., x = .$Ozone)
使用 with
解决问题。
airquality %>% with(., do.call("mean", list(x = Ozone, na.rm = TRUE)))
除非有一个点作为 main 函数的参数,这里 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)))
|>
在基础 R 4.1 中引入 |> 管道后,这些工作正常,但与上述其他类似的工作无效:
airquality |> with(do.call("mean", list(x = Ozone)))
airquality |> (\(.) do.call("mean", list(x = .$Ozone)))()
当.
间接传递给do.call
等函数时,magrittr
看不到.
。
会给出错误的示例,因为点不可见。
airquality %>% do.call("mean", list(x = .$Ozone, na.rm = TRUE))
因为 list
对未命名参数 (...) 开放,所以 .
转到第一个参数。这可以表示为
list(., x = .$Ozone)
使用 with
解决问题。
airquality %>% with(., do.call("mean", list(x = Ozone, na.rm = TRUE)))
除非有一个点作为 main 函数的参数,这里 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)))
|>
在基础 R 4.1 中引入 |> 管道后,这些工作正常,但与上述其他类似的工作无效:
airquality |> with(do.call("mean", list(x = Ozone)))
airquality |> (\(.) do.call("mean", list(x = .$Ozone)))()