R语言 如何开发一个名为'setOption'的函数?

bsxbgnwa  于 2023-03-15  发布在  其他
关注(0)|答案(2)|浏览(90)

R::base有一个名为getOption的函数,该函数按预期工作。

getOption("max.print");

我找不到反函数setOption。请告诉我它在哪里?
如果它不存在,我们能写一个吗?

setOption("max.print", 20);

其中函数是 backbone 形式:

setOption = function(myKey, myValue)
    {
    
    
    }

我试了显而易见的方法:

options()[["max.print"]] = 20

这抛出错误。
也许是:

onames = names(options());
options(setNames( ???

上面的代码是未完成的,因此有这个问题。
下面是“par”的variadic getter-setter函数示例:

setParKey = function(myKey, myValue)
    {
    pnames = names( par(no.readonly = TRUE) );
    if(is.element(myKey, pnames))
        {
        par(setNames(list(myValue), myKey))
        }
    }
cyvaqqii

cyvaqqii1#

setOption <- options
setOption(max.print = 20)
getOption("max.print")
#> [1] 20

或更靠近您的界面(使用R package rlang):

setOption <- function(myKey, myValue) rlang::exec('options', !!myKey := myValue)
setOption('max.print', 30)
getOption("max.print")
#> [1] 30

我不确定我是否理解你关于变元函数的观点,但是函数options()已经是变元函数了...

setOptions <- options
setOptions(max.print = 20, digits = 12)
getOption("max.print")
#> [1] 20
getOption("digits")
#> [1] 12
cidc1ykv

cidc1ykv2#

我正在寻找一个R::base解决方案。在摆弄了par的示例之后,我想通了这个问题。

setOption = function(myKey, myValue)
    {
    onames = names( options() );
    if(is.element(myKey, onames))
        {
        options(setNames(list(myValue), myKey));
        }
    }

这遵循了variadic getter-setter的方法,同时也创建了base::getOption明显缺失的inverse函数。

示例

getOption("digits");
# [1] 3
setOption("digits", 5);
getOption("digits");
# [1] 5

相关问题