假设我有对象foo
:
foo <- 2:12
我希望能够以显示原始赋值语法的方式调用对象foo
。例如:
>function(foo)
2:12
不起作用的方法:
> paste0(foo)
[1] "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12"
> quote(foo)
foo
我如何恰当地做到这一点?
更新:(针对上下文):
我的目标是在函数中提供一系列值作为参数,但该范围需要以书面形式应用(未绘制)。
这是一个试图简化问题的例子,这使我不得不提出这个问题。 (这是我的问题的简化版本,所以我理解这个特定情况有简单的解决方案)。我找到了一种解决方法来使代码工作(见第25-26行)。
func1 <- function(gps,num) {
v <- NULL
for(i in gps) {
v <- c(v,num^i)
}
v
}
func2 <- function(dim,num) {
v <- cbind(rep(num,5))
dim(v)[dim]
}
num.A <- 1
num.B <- 2
num.C <- 3
nums <- objects()[grep('num.',objects())]
gen.func <- function(func,num,other) {
y <- gsub('num.','',num)
args <- formalArgs(func)
args2 <- args
args2[grep('num',args)] <- paste0(args2[grep('num',args)],'.',y)
args2[grep('num',args,invert = T)] <- 'x'
x <<- other
lst <- mget(c(args2),envir = parent.frame())
names(lst) <- formalArgs(func)
do.call(func,lst)
}
gen.func(func1,nums[1],other = 2:12)
gen.func(func2,nums[1],other = 2)
答案 0 :(得分:8)
R不以任何方式存储此信息,因此无法检索。要存储它,您需要以非常重要的方式覆盖<-
:
`<-` = function (lhs, rhs) {
lhs = substitute(lhs)
assign_expr = bquote({
assign(.(deparse(lhs, backtick = TRUE)), .(rhs))
attr(.(lhs), 'repr') = substitute(.(substitute(rhs)))
})
eval.parent(assign_expr)
}
然后你可以使用:
> x <- 1 : 5
> x
[1] 1 2 3 4 5
attr(,"repr")
1:5
> attr(x, 'repr')
1:5