![](/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.