gpt4 book ai didi

r - 如何在不评估您提供的参数的情况下调用命名空间函数?

转载 作者:行者123 更新时间:2023-12-01 12:58:20 25 4
gpt4 key购买 nike

在 R 中,调用另一个函数而不评估你给它的参数的惯用方法显然如下:

Call <- match.call(expand.dots = TRUE)
# Modify parameters here as needed and set unneeded ones to NULL.
Call[[1L]] <- as.name("name.of.function.to.be.called.here")
eval.parent(Call)

但是,当我在 as.name() 调用中放置命名空间名称(例如 utils::write.csv)时,我收到错误消息:

"could not find function "utils::write.csv"

使用这个 R 习语调用命名空间函数的正确方法是什么?

最佳答案

这是一个使用 do.call() 的解决方案,它既构造又评估函数调用。

与您开始使用的方法一样,该方法使用 R 调用是列表的事实,其中:(a) 第一个元素是函数的名称;和 (b) 以下所有元素都是该函数的参数。

j <- function(x, file) {
Call <- match.call(expand.dots = TRUE)
arglist <- as.list(Call)[-1]
do.call(utils::write.csv, arglist)
}

dat <- data.frame(x=1:10, y=rnorm(10))

j(dat, file="outfilename.csv")

编辑: FWIW,这是来自 plot.formula 的示例在 base R 中,它使用类似于上面的结构:

{
m <- match.call(expand.dots = FALSE)
eframe <- parent.frame()
. . .
. . .
m <- as.list(m)
m[[1L]] <- stats::model.frame.default
m <- as.call(c(m, list(na.action = NULL)))
mf <- eval(m, eframe)
. . .
. . .
}

该函数使用 do.call()稍后构建。更深入地了解杂草,我的阅读是,在此处显示的代码片段中,它主要使用几个步骤,主要是因为需要添加 na.action=NULL。到参数列表。

无论如何,它看起来像 do.call()选项尽可能接近规范。

关于r - 如何在不评估您提供的参数的情况下调用命名空间函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8333240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com