#r #list #dataframe #vector #lapply
#r #Список #фрейм данных #вектор #lapply
Вопрос:
Я получил помощь о том, как создать набор списков внутри списков, однако мне не удалось добавить еще один слой / расширить глубину моих списков. Все, что я хочу, это добавить последний «слой» в каждый список, который гласит: «DataFrame», «DataFrame2» и так далее. В настоящее время у меня есть:
Layer1 = c('AA', 'BB', 'CC', 'DD')
myList=setNames(as.list(Layer1),Layer1)
myList=lapply(myList, function(x){
setNames(vector("list",length(Layer1)),paste0(x," vs ",Layer1))
})
Который создает myList
, содержащий AA
, BB
, CC
и DD
, в каждом из этих списков есть дополнительный список, например AA vs BB
, AA vs BB
и т.д., или в случае BB
списков внутри будет прочитан BB vs AA
, BB vs BB
(далее именуемый ?? vs ??
файлами) и так далее и тому подобное.
Итак, я подумал, что мог бы легко добавить к этому дополнительный уровень, выполнив что-то вроде…
Layer1 = c('AA', 'BB', 'CC', 'DD')
Layer3 = c('DataFrame', 'DataFrame2', 'Matrix', 'Matrix2')
myList=setNames(as.list(Layer1),Layer1)
myList=lapply(myList, function(x){
setNames(vector("list",length(Layer1)),paste0(x," vs ",Layer1))
myList[i]=lapply(myList, function(x){
setNames(vector("list",length(Layer3)),Layer3)
})
})
Где я наивно пытался использовать myList[i]
(что, я знаю, не сработает, но я не уверен, что все, что я делаю, сработает), чтобы указать, что я хотел бы перейти на уровень ниже и начать добавлять пустые DataFrame
и Matrix
векторы (в мои ?? vs ??
подсписки), чтобы у меня были «пустые слоты» — так, чтобыговорите — для перемещения моих данных в будущем.
В конечном счете, я бы хотел, чтобы каждая ?? vs ??
папка содержала пробел DataFrame
, DataFrame2
, Matrix
, Matrix2
.
Ответ №1:
lapply
перебирает каждый элемент структуры, подобной списку, и применяет к нему функцию. Примечательно, что он не включает позиционный аргумент.
Что вы хотите сделать, это:
- пройдите по всем элементам
Layer1
и создайте для каждого элемента список, который, в свою очередь - содержит
Layer1
много элементов, каждый из которых содержит - столько элементов, сколько указано в
Layer3
Код
Layer1 <- c('AA', 'BB', 'CC', 'DD')
Layer3 <- c('DataFrame', 'DataFrame2', 'Matrix', 'Matrix2')
my_list <- lapply(Layer1, function(el_layer1_outer) {
## create a list with |Layer1| elements
## this we do by creating first an inner list vector(.)
## and the repeating it |Layer1| times
ret <- rep(list(setNames(vector("list", length(Layer3)),
Layer3)),
length(Layer1))
setNames(ret, ## ret has no proper names yet
paste(el_layer1_outer, "vs.", Layer1))
})
names(my_list) <- Layer1 ## could have been done with setNames as well
str(my_list)
List of 4 $ AA:List of 4 ..$ AA vs. AA:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL ..$ AA vs. BB:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL ..$ AA vs. CC:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL ..$ AA vs. DD:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL $ BB:List of 4 ..$ BB vs. AA:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL ..$ BB vs. BB:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL ..$ BB vs. CC:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL ..$ BB vs. DD:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL $ CC:List of 4 ..$ CC vs. AA:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL ..$ CC vs. BB:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL ..$ CC vs. CC:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL ..$ CC vs. DD:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL $ DD:List of 4 ..$ DD vs. AA:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL ..$ DD vs. BB:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL ..$ DD vs. CC:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL ..$ DD vs. DD:List of 4 .. ..$ DataFrame : NULL .. ..$ DataFrame2: NULL .. ..$ Matrix : NULL .. ..$ Matrix2 : NULL
Комментарии:
1. Спасибо, это действительно полезно, и включение поясняющих комментариев имеет большое значение.