我有一个问题,在度过了我的周末之后,我想寻求帮助。为了解释这个问题,我想直接跳入一个例子:
df <- data.frame(x=rnorm(100), z=rnorm(100), y=rnorm(100), f=rep(1:5,length.out=100 ))
mod <- lm(y ~ x, data=df[df$z>0,])
我想回收模型的数据参数:
dat <- mod$call[['data']]
这给了我:
df[df$z > 0, ]
但是,str(dat)
会显示这是一个类型的对象language
。但是,我想使用此表达式来访问已在lm
(包括子设置)中使用的数据框,以获取另一个变量的相应值,例如f
. 请注意,将语言对象转换为字符 withas.character()
将导致字符向量,并且某些括号将丢失。
我想在函数中使用它,我正在寻找的是这样的:
foo <- function(fm, "var.name"){
new <- paste(dat, "$", var.name, sep="")
newvar <- eval(parse(text=new), envir=.GlobalEnv)
... do stuff with newvar ...
}
如果没有子设置,f
如果我指定var.name
为,此过程会为我提供变量f
。使用子设置时,parse
由于dat
现在是带括号的字符向量,我遇到了问题。
作为旁注:我想data
从 -function 回收 -argumentlm
而不是只使用相同的表达式的var.name
原因是我经常更改子设置,并且从 lm-object 识别它使我生活更轻松。它还消除了错误来源。
如果有人可以在这里帮助我,我将非常感激...