R中的函数可以获得变量赋值编码?

时间:2017-01-05 16:48:13

标签: r variable-assignment

假设我有对象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)

1 个答案:

答案 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