除非已经分配了R变量,否则为其分配一个默认值?

时间:2016-12-09 14:19:44

标签: r

是否有一种惯用的方法为变量分配默认值?但是没有覆盖它已经被分配了?

目前我选择了

myvar <- ifelse(exists("myvar"), myvar, "my default value")

myvar在那里重复了3次。我希望找到一个构造,我不需要重复变量名称,如

setdefault(myvar, "my default value") # won't work 

我知道如何为函数参数指定默认值(这是非常简洁的),但我想知道是否有类似的&#34;常规&#34;变量。

1 个答案:

答案 0 :(得分:0)

我找不到任何&#34;内置&#34;提供和最接近我想要的语法是这样的:

setdefault   <-  function(name, value) {
  if ( ! exists(name) ) {
    cat("assign",name, "the value", value)
    assign(name, value, pos=1) # in the parent environment
  } else {
    cat(name, "is already assigned. Skip\n")
  }
}

setdefault("a", 20)
cat(a,"\n") # 20
setdefault("a", 30)
cat(a,"\n") # 20

此处定义的函数setdefault()将检查名称exists(),如果不是assign(name, value, pos=1),它将在呼叫者的环境中等同于myvar <- value

options()可以用作全局变量的替代品,那些已经提供了默认机制:

getOption("a", 20) # 20
options(a=30)
getOption("a", 2) # 30