Вы можете так же легко получить доступ к каждому элементу в списке, используя, например, path[[1]]
. Вы не можете поместить набор матриц в атомный вектор и получить доступ к каждому элементу. Матрица представляет собой атомный вектор с атрибутами измерения. Я бы использовал структуру списка, возвращенную split
, для чего она была предназначена. Каждый элемент списка может хранить данные разных типов и размеров, поэтому он очень универсален, и вы можете использовать функции *apply
для дальнейшей работы с каждым элементом в списке. Пример ниже.
# For reproducibile data
set.seed(1)
# Make some data
userid <- rep(1:2,times=4)
data1 <- replicate(8 , paste( sample(letters , 3 ) , collapse = "" ) )
data2 <- sample(10,8)
df <- data.frame( userid , data1 , data2 )
# Split on userid
out <- split( df , f = df$userid )
#$`1`
# userid data1 data2
#1 1 gjn 3
#3 1 yqp 1
#5 1 rjs 6
#7 1 jtw 5
#$`2`
# userid data1 data2
#2 2 xfv 4
#4 2 bfe 10
#6 2 mrx 2
#8 2 fqd 9
Доступ к каждому элементу с помощью оператора [[
следующим образом:
out[[1]]
# userid data1 data2
#1 1 gjn 3
#3 1 yqp 1
#5 1 rjs 6
#7 1 jtw 5
Или используйте функцию *apply
для выполнения дальнейших операций над каждым элементом списка , Например, чтобы взять среднее значение столбца data2
, вы можете использовать sapply следующим образом:
sapply( out , function(x) mean( x$data2 ) )
# 1 2
#3.75 6.25