繁体   English   中英

R:如何使用“数据” - lm-formula的参数作为字符?

[英]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.namef 通过子设置,我遇到了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM