#r #for-loop
Вопрос:
Я получаю эту ошибку: Error in *tmp*[[i]] : subscript out of bounds
Когда я запускаю код, который повторяется через i и j.
Примеры данных ниже:
#Make example data
A1 <- rnorm(1:100, mean = 10, sd = 1)
B1 <- rep(c(2, 4, 5, 7), each = 25)
AB1 <- rbind(A1, B1)
colnames(AB1) <- rep(c("A","b"), each = 50)
A2 <- rnorm(1:100, mean = 50, sd = 1)
B2 <- rep(c(2, 4, 5, 7), each = 25)
AB2 <- rbind(A2, B2)
colnames(AB2) <- rep(c("A","b"), each = 50)
A3 <- rnorm(1:100, mean = 100, sd = 1)
B3 <- rep(c(2, 4, 5, 7), each = 25)
AB3 <- rbind(A2, B2)
colnames(AB3) <- rep(c("A","b"), each = 50)
data <- list(AB1, AB2, AB3)
# for loop showing error
histlist = NULL
for (i in seq_along(data)) {
columns <- unique(colnames(data[[i]]))
for (j in columns) {
columnsub <- data[[i]][, c(rep(c("A"), each = 50))]
histlist[[i]][[j]] <- hist(columnsub) #error from this line
}
}
Я хочу, чтобы цикл создавался histlist
с каждым i
в виде вложенного списка, имеющего A
вложенные значения и B
со вложенными hist()
значениями. В основном, то, что вы видите histlist
после первой итерации.
Любая помощь будет очень признательна
Ответ №1:
Мы можем исправить проблему, обратившись histlist = NULL
к :
histlist = vector('list', length(data))
Это позволит предварительно выделить вектор и правильно назначить его в список.
Комментарии:
1. Именно то, что мне было нужно. Спасибо!
Ответ №2:
Вы можете сделать это с помощью вложенного lapply
вызова, который автоматически создаст вложенный список.
histlist <- lapply(data, function(x) {
cols <- unique(colnames(x))
lapply(cols, function(y) hist(x[, colnames(x) == y]))
})