【发布时间】:2020-07-29 08:01:20
【问题描述】:
我正在尝试将一堆不同的模型拟合到单个数据集。每个模型都使用结果变量和数据子集的不同组合。为了适应所有这些模型,我创建了一个数据框,其中一列用于结果变量,一列指定数据子集(作为字符串)。 (请注意,子集是重叠的,因此使用nest() 似乎没有明显的方法。)然后我创建了一个新函数,该函数采用该数据帧的一行并使用这些选项调用“lm”。最后,我使用 pmap 将此函数映射到数据框。
经过大量实验后,我找到了一种可行的方法,但这种方法相当不雅(请参阅下文,了解我所做的简化版本)。似乎应该有一种方法可以将子集条件传递给 lm 中的子集参数,而不是使用 parse(eval(text = condition)) 首先创建一个逻辑向量。我阅读了有关元编程的 Advanced R 部分,希望它们能提供一些见解,但我找不到任何有用的东西。
任何建议都会有所帮助。
library(tidyverse)
outcomes <- c("mpg", "disp")
sub_conditions <- c("mtcars$cyl >=6", "mtcars$wt > 2")
models <- expand.grid(y = outcomes, condition = sub_conditions) %>% mutate_all(as.character)
fit <- function(y, condition) {
# Create the formula to use in all models
rx <- paste(y, "~ hp + am")
log_vec <- eval(parse(text = condition))
lm(rx, data = mtcars[log_vec,])
}
t <- pmap(models, fit)
【问题讨论】:
标签: r