r 循环 data.frame 到 运行 具有不同 DV 和权重的相同回归
r looping through a data.frame to run same regression with differing DVs and weights
您好,我无法让 lapply 中的 lm 遍历不同的 DV,我已经在 data.frame.
中预先确定了相应的权重列
这是一个工作示例:
require(dplyr)
df <- mtcars %>% mutate_at(
vars(mpg:drat),
funs(wt=rnorm(n()))
)
dvs <- names(select(df,mpg:drat))
res <- list()
res <- lapply(dvs, function(x) {
formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
lm(formula,df)
})
但是这个returns"object 'mpg_wt' not found"
res <- lapply(dvs, function(x) {
formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
weightvars <- paste0(x,"_wt")
lm(formula,weights=as.formula(weightvars),df)
})
还有这个returns"variable lengths differ (found for '(weights)')"
res <- lapply(dvs, function(x) {
formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
weightvars <- paste0(x,"_wt")
lm(formula,weights=eval(weightvars),df)
})
只需使用解析并传递 weightvars
作为 text
的值。
希望对您有所帮助:
res <- lapply(dvs, function(x) {
formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
weightvars <- paste0(x,"_wt")
lm(formula,weights=eval(parse(text=weightvars)),df)
})
或在 eval
中使用 as.name
函数,如下所示:
res <- lapply(dvs, function(x) {
formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
weightvars <- paste0(x,"_wt")
lm(formula,weights=eval(as.name(weightvars)),data=df)
})
您好,我无法让 lapply 中的 lm 遍历不同的 DV,我已经在 data.frame.
中预先确定了相应的权重列这是一个工作示例:
require(dplyr)
df <- mtcars %>% mutate_at(
vars(mpg:drat),
funs(wt=rnorm(n()))
)
dvs <- names(select(df,mpg:drat))
res <- list()
res <- lapply(dvs, function(x) {
formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
lm(formula,df)
})
但是这个returns"object 'mpg_wt' not found"
res <- lapply(dvs, function(x) {
formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
weightvars <- paste0(x,"_wt")
lm(formula,weights=as.formula(weightvars),df)
})
还有这个returns"variable lengths differ (found for '(weights)')"
res <- lapply(dvs, function(x) {
formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
weightvars <- paste0(x,"_wt")
lm(formula,weights=eval(weightvars),df)
})
只需使用解析并传递 weightvars
作为 text
的值。
希望对您有所帮助:
res <- lapply(dvs, function(x) {
formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
weightvars <- paste0(x,"_wt")
lm(formula,weights=eval(parse(text=weightvars)),df)
})
或在 eval
中使用 as.name
函数,如下所示:
res <- lapply(dvs, function(x) {
formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
weightvars <- paste0(x,"_wt")
lm(formula,weights=eval(as.name(weightvars)),data=df)
})