我想要做的是避免在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
冲突。