R中是否有一个简洁的语法来说“定义是否已定义?”

时间:2013-10-29 01:08:06

标签: r

如果我只想在未定义的情况下分配变量,这是最简洁的方法吗,还是有更短的语法来表示这个想法?

if (!exists('t')) t = 1

例如,在C#中,可以写

int y = x ?? -1;

表达y应分配给x的想法,除非x为空。

2 个答案:

答案 0 :(得分:4)

您可以将自己的中缀运算符拼接在一起:

`%<-%`  <- function(x,y){
   nm <- as.character(substitute(x))
   if (!exists(nm,where = parent.frame())){
     assign(x=nm,value=y,envir = parent.frame())
     return(TRUE)
   }else{
     return(FALSE)
   }
 }

> x <- 2 
> x %<-% 5
[1] FALSE
> x
[1] 2
> y %<-% 10
[1] TRUE
> y
[1] 10

答案 1 :(得分:0)

检查向量是否为空的好方法是使用length函数。但这可能与您的具体问题无关。

> t<-NULL
> length(t)
[1] 0
> t<-1
> length(t)
[1] 1