2016-03-07 52 views
0

有人可以解释如何访问在eval语句中创建的变量吗?我知道还有很多其他的解决方案可以解决这个问题,但我想了解为什么我遇到范围问题。在eval中初始化访问变量

错误

Error in paste0("fit<-summary(lm(NPISplit~", x, ",data=df));rs<-round(fit$r.squared,3);pv<-round(fit$coefficients[,4],3);if(pv<0.05){paste(", : 
object 'rs' not found 

代码

df<-data.frame(NPISplit=c(0,0,0,1,1,1),Happiness=c(2,5,6,8,7,4)) 
moods<-c('Happiness') 
lapply(moods,function(x){ 
    eval(parse(text=paste0(
     "fit<-summary(lm(NPISplit~",x,",data=df));rs<-round(fit$r.squared,3);pv<-round(fit$coefficients[,4],3);if(pv<0.05){paste(",x,"=",rs,"&",pv,")}"))) 
    }) 
+0

看起来没有理解R编程。我建议你提供缺少的信息以允许代码实际运行,除非当然你不能立即看到'rs',更不用提'x','fit','pv')无处可见。尝试'fortunes :: fortune(“parse”)' –

+0

函数从里到外评估。在这里,'paste0',然后是'parse',然后是'eval'。你正试图'paste0'' rs',但它不会被定义为另外两个步骤。你可以将你的'eval(parse(...))'分成两部分,但是有更好的方法。 – alistaire

回答

1

你只需要逃避引号内的报价。

x <- 1 
lapply(1:2, function(.) eval(parse(text="y<-x+1;paste(\"y=\", y)"))) 
+0

单引号也适用。并同意,这是一个非常不愉快的编码方式。 – alistaire