我目前正在从rp.slider库中调用tkrplot,并在循环中使用多个参数,例如:

rp.slider(rpplot, param1)
rp.slider(rpplot, param2)

等等。

理想情况下,我想在一个循环中执行此操作,例如
for(i in 1:10)
  rp.slider(rpplot, foo(paste(param,i,sep="")))

其中foo将字符串编码为变量名(符号?)。 rp.slider使用deparse(substitute(var))将参数转换为字符串。是否有foo函数可以让我做到这一点?我尝试了as.symbolas.nameparse(以及其他)没有成功。

任何帮助将非常感激!

为了澄清,deparse(substitute(x))返回[1] "x"-我想要一种从字符串返回相同输出的方法,即哪种foo为输入的[1] "x"输出deparse(substitute(foo("x")))?是否可以?

最佳答案

尝试eval(parse(text=...))eval(substitute(...))
parse(text=...)转换表达式中的字符串,eval评估表达式。确保使用text参数,因为parse通常会查找文件。忘记那是一个普遍的错误。另请参见?parse?eval

> a <- 10
> x <- deparse(substitute(a))
> eval(parse(text=x))
[1] 10

要显示如何使用它,请调整代码:
for(i in 1:10)
  eval(parse(text=paste("rp.slider(rpplot,param",i,")",sep="")))
substitute用第二个参数中给出的字符串替换语言对象中的值:
for(i in 1:10)
  eval(
    substitute(
      rp.slider(rpplot,x),
      list(x=as.name(paste("param",i,sep="")))
    )
  )

或者,使用帮助文件中的示例:
library(rpanel)
rpplot <- rp.control(title = "Demonstration of rp.tkrplot", h = 1,j=1)

redraw <- function(panel) {
  rp.tkrreplot(panel, tkrp)
}
x <- c('h','j')
rp.tkrplot(rpplot, tkrp, function(panel) plot((1:20)^panel$j, (1:20)^panel$h))

eval(parse(text=paste("rp.slider(rpplot, ",x[1]," , action = redraw,
    from = 0.05, to = 2.00, resolution = 0.05)")))

eval(
  substitute(
    rp.slider(rpplot, x, action=redraw, from=0.05, to=2.00, resolution=0.05),
    list(x = as.name(x[2]))
  )
)

为何需要这样做的说明可以在rp.slider的源代码中找到。在函数内部获取varname的构造不是R中使用的标准。实际上,正是出于这个原因,强烈建议不要使用'deparse(substitute())'。对于大多数功能,as.expression("x")可以使用变量名来获取变量。 ,rpanel软件包的作者使这成为不可能。

关于r - 与R的deparse(substitute(var))相反?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5542945/

10-10 13:50