R-来自两个列表的元素的所有成对组合

时间:2013-07-27 08:43:03

标签: r

我很确定这是一个直截了当的答案,但由于我的R经验有限,我很难想出来。我有一个代表不同实验的数据框列表,对于这些数据框中的每一个,我都生成了一个回归模型 - 模型包含在一个单独的列表中。我想做的是使用predict()函数来预测数据框架和模型的每种可能组合的响应。以下是仅使用两个数据框和两个模型来说明所需结果的示例:

predictor <- runif(1000)
response <- runif(1000)
data.1 <- data.frame(predictor,response) # generate first data frame

predictor <- runif(1000)
response <- runif(1000)
data.2 <- data.frame(predictor,response) # generate second data frame

model.1 <- lm(response ~ predictor,data=data.1) # generate model for data.1
model.2 <- lm(response ~ predictor,data=data.2) # generate model for data.2

pred.1.1 <- predict(model.1,newdata=data.1) # use model.1 to predict outcome based on data.1
pred.1.2 <- predict(model.1,newdata=data.2) # use model.1 to predict outcome based on data.2
pred.2.1 <- predict(model.2,newdata=data.1) # use model.2 to predict outcome based on data.1
pred.2.2 <- predict(model.2,newdata=data.2) # use model.2 to predict outcome based on data.2

对于上面的两个案例,这很简单,但实际上我有10个不同的数据框和10个模型,所以上面的方法既繁琐又愚蠢。我已经尝试了使用lapply()的各种方法,但我似乎无法正确使用语法 - 关于如何最好地对两个列表的元素的所有可能的成对组合执行函数的指针?

谢谢,         塞特

1 个答案:

答案 0 :(得分:4)

如果将模型和数据框放入列表中,生活将变得更加轻松。

modlst <- list(model.1, model.2, ....)
datlst <- list(data.1, data.2, ....)

out <- lapply(modlst, function(mod) {
           lapply(datlst, function(dat) predict(mod, dat))
       })