如何引用作为内置函数的函数参数

时间:2014-09-08 17:21:39

标签: r

我想要做的是避免在array周围编写包装函数,以便能够根据我创建的数组的维度来分配dimnames。 (例如,请参阅设置数组的dimnames的规则,以供给e1071:interpolate)。

此功能有效:

# for , say, x<-array(1:24,dim=c(2,3,4))
foofunc <- function(x,  mid=sapply(1:length(dim(eval(substitute(x))) ), function(j) 1:(dim(eval(substitute(x) ) )[j]) ) ) {
dimnames(x)<-mid
return(x)
    }

但是apply的命名参数是dim,所以如果我尝试

 bar<-array(1:24,dim=c(2,3,4), dimnames=sapply (1:length(eval(substitute(dim))),function(j) 1:(eval(substitute(dim))[j]) ))

这个错误并不奇怪:

Error in eval(substitute(dim))[j] : 
  object of type 'builtin' is not subsettable

我知道我可以通过包装函数或第二行代码轻松地分配dimnames,但是想知道是否有任何方法绕过这个也是内置函数的命名参数的kerfluffle。

编辑:为了澄清,我的技术类似于许多检索外部变量名称的函数,例如: function(x,xname=deparse(substitute(x))),它将xname分配给函数的实际名称。这里的问题是array中的命名参数是dim,它与内置函数dim冲突。

0 个答案:

没有答案