gpt4 book ai didi

r - 更改包中所有函数的通用默认参数

转载 作者:行者123 更新时间:2023-12-04 11:47:22 26 4
gpt4 key购买 nike

我想编写一个函数,它将默认值“重置”为包中所有 R 函数中通用的参数。

这可能吗?

我想到的是这个,但这只是返回一个 curry ​​函数列表:

library(magrittr)

function(parameter){
ls("package:packageName") %>%
lapply(function(fxnName){
functional::Curry(get(fxn), paramOfInterest = parameter)
}
}

管道 %>%来自 magrittr包裹。

我想这样做的一个警告是丢失文档。

也许我可以通过引用可修改并存储在包中的对象中的属性来解决这个问题?

最佳答案

虽然可以通过分配给全局环境来做到这一点,但我认为以下内容更简洁,因为可以通过 detach 轻松恢复默认行为环境:

首先是一些演示功能,因为我不知道您要使用哪个包:

packageDemo <- new.env()
makeFun <- function(x) {x;function(param) c(x, param)}
for (i in paste0("f", letters)) assign(i, makeFun(i), packageDemo)

现在这是我的 curry 包功能。它采用环境或包名称作为字符向量(例如 "package:myPackage" )。环境中的所有函数都被柯里化(Currying)并添加到返回的新环境中。这可以是 attach如果需要的话。
curryPackage <- function(package, ..., functionNames = NULL){
if (is.character(package) && !grepl("^package:", package)) {
package <- paste0("package:", package)
}
fnNames <- ls(package)
if (!is.null(functionNames)) {
fnNames <- fnNames[fnNames %in% functionNames]
}
fnNames <- fnNames[vapply(fnNames, function(x) is.function(get(x, package)), logical(1))]
fnList <- lapply(fnNames, function(x){
functional::Curry(get(x, package), ...)
})
names(fnList) <- fnNames
list2env(fnList)
}

现在一些演示
attach(packageDemo)
fc("Testing")
#[1] "fc" "Testing"
fc()
#Error in fc() : argument "param" is missing, with no default

newPack <- curryPackage(packageDemo, param = "demo")
attach(newPack)
#The following objects are masked from packageDemo:
#
# fa, fb, fc, fd, fe, ff, fg, fh, fi, fj, fk, fl, fm, fn, fo, fp, fq, fr, fs, ft, fu, fv, fw, fx, fy, fz
fc("Testing")
#Error in (function (param) : unused argument ("Testing")
fc()
#[1] "fc" "demo"

关于r - 更改包中所有函数的通用默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30884835/

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