![](/img/trans.png)
[英]R - how to pass a formula to a with(data, lm(y ~ x)) construction
[英]R: How to use “data”-argument of lm-formula as character?
我有一个问题,在度过周末之后,我想寻求帮助。 为了解释这个问题,我想直接跳到一个例子中:
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,])
我想回收模型的data-argument:
dat <- mod$call[['data']]
这给了我:
df[df$z > 0, ]
但是, str(dat)
将揭示这是一种类型language
的对象。 但是,我想使用这个表达式来访问已在lm
使用的数据帧(包括子设置),以获取另一个变量的相应值,比如f
。 请注意,将语言对象转换为带有as.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
现在是带括号的字符向量。
作为旁注:我想要从lm
-function回收data
-argument而不是仅使用与var.name
相同的表达式的var.name
是我经常更改子设置,并从中识别它lm-object让我的生活更轻松。 它还会删除错误源。
如果有人能帮助我,我会感激不尽...
你可以像这样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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.