1

我有一个问题,在度过了我的周末之后,我想寻求帮助。为了解释这个问题,我想直接跳入一个例子:

 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 识别它使我生活更轻松。它还消除了错误来源。

如果有人可以在这里帮助我,我将非常感激...

4

1 回答 1

3

你可以eval这样表达

foo <- function(model, varname) eval(model$call[["data"]])[,varname]
foo(mod, "f")
##  [1] 2 5 2 5 1 2 1 5 2 3 1 2 3 1 3 4 1 3 4 1 2 3 2 4 1 4 1 2 4 5
## [31] 2 4 2 3 4 2 2 3 4 1 3 1 2
于 2013-07-28T16:45:19.693 回答