coding_heart
coding_heart

Reputation: 1295

List Indexing in R over a loop

I'm new to using lists in R and am trying to run a loop over various data frames that stores multiple models for each frame. I would like the models that correspond to a given data frame within the first index of the list; e.g. [[i]][1], [[i]][2]. The following example overwrites the list:

f1 <- data.frame(x = seq(1:6), y = sample(1:100, 6, replace = TRUE), z = rnorm(6))
f2 <- data.frame(x = seq(6,11), y = sample(1:100, 6, replace = TRUE), z = rnorm(6))

data.frames <- list(f1,f2)
fit <- list()

for(i in 1:length(data.frames)){
    fit[[i]] <- lm(y ~ x, data = data.frames[[i]])  
    fit[[i]] <- lm(y ~ x + z, data = data.frames[[i]])  
}

Any idea how to set up the list or the indexing in the loop such that it generates an output that has the two models for the first frame referenced as [[1]][1] and [[1]][2] and the second frame as [[2]][1] and [[2]][2]? Thanks for any and all help.

Upvotes: 1

Views: 111

Answers (1)

thelatemail
thelatemail

Reputation: 93813

Calculate both models in a single lapply call applied to each part of the data.frames list:

lapply(data.frames, function(i) {
  list(lm(y ~ x, data = i), 
       lm(y ~ x + z, data=i))
})

Upvotes: 3

Related Questions