Это то, что я пытаюсь сделать. Мне нужно написать функцию, назовем ее combine
, которая занимает несколько списков и объединяет их. Чтобы передать несколько списков функции, мне нужно использовать эллипсис в качестве аргумента для функции. Я не могу понять, как правильно комбинировать списки внутри функции.Функция объединения нескольких списков по факторам в R
Списки (все из которых имеют общую структуру), которые будут переданы функции, имеют несколько факторов, некоторые из которых являются матрицами и другими числовыми векторами. Так, например, списки выглядят
list1 <- list(a= matrix(), b=numeric(), c=numeric())
мне нужно определить такую функцию:
combine <- function(...) {
#get all lists as lists or something that is convenient
all_lists <- list(...)
#define a list which will be returned
l <- list(a= list(), b=numeric(), c=numeric())
#l$a <- combine factor 'a' of all input lists as lists, use list()
#l$b <- cbind factor 'b' of all input lists as data frame, use cbind()
#l$c <- set union of elements of factor 'c' of input lists, use union()
return(l)
}
Так что, если я прохожу три списка функции, выход должен быть как
>l1 <- list(a= matrix(c(1:20), 10,2), b=c(1:11), c= c(1:5))
>l2 <- list(a= matrix(c(21:40), 10,2), b=c(11:21), c= c(2:7))
>l2 <- list(a= matrix(c(41:60), 10,2), b=c(21:31), c= c(3:6))
>l <- combine(l1, l2, l3)
>l$a[1]
[[1]]
[,1] [,2]
[1,] 1 11
[2,] 2 12
[3,] 3 13
[4,] 4 14
[5,] 5 15
[6,] 6 16
[7,] 7 17
[8,] 8 18
[9,] 9 19
[10,] 10 20
> l$b[4,3]
[1] 24
> l$c
[1] 1 2 3 4 5 6 7
Любая помощь будет высоко оценена.
да, но 'c' просто связывает все списки вместе, он не делает вид переформатирования факторов, которые моя функция должна делать. –