data.frames को सूचियों के रूप में संग्रहीत किया जाता है, मुझे विश्वास है। इसलिए जबरदस्ती सबसे अच्छी लगती है:
as.list(as.data.frame(x))
> as.list(as.data.frame(x))
$V1
[1] 1 2 3 4 5
$V2
[1] 6 7 8 9 10
बेंचमार्किंग के परिणाम दिलचस्प हैं। as.data.frame डेटा से अधिक तेज़ है। वर्कफ़्लो, या तो क्योंकि डेटा.फ़्रेम को पूरी तरह से एक नया ऑब्जेक्ट बनाना पड़ता है, या क्योंकि कॉलम नामों पर नज़र रखना किसी तरह महंगा है (ग (unname ()) बनाम c () तुलना देखें )? @ टॉमी द्वारा प्रदान किया जाने वाला लेप्ली समाधान परिमाण के एक क्रम से तेज है। As.data.frame () परिणाम मैन्युअल रूप से coercing द्वारा कुछ सुधार किया जा सकता है।
manual.coerce <- function(x) {
x <- as.data.frame(x)
class(x) <- "list"
x
}
library(microbenchmark)
x <- matrix(1:10,ncol=2)
microbenchmark(
tapply(x,rep(1:ncol(x),each=nrow(x)),function(i)i) ,
as.list(data.frame(x)),
as.list(as.data.frame(x)),
lapply(seq_len(ncol(x)), function(i) x[,i]),
c(unname(as.data.frame(x))),
c(data.frame(x)),
manual.coerce(x),
times=1000
)
expr min lq
1 as.list(as.data.frame(x)) 176221 183064
2 as.list(data.frame(x)) 444827 454237
3 c(data.frame(x)) 434562 443117
4 c(unname(as.data.frame(x))) 257487 266897
5 lapply(seq_len(ncol(x)), function(i) x[, i]) 28231 35929
6 manual.coerce(x) 160823 167667
7 tapply(x, rep(1:ncol(x), each = nrow(x)), function(i) i) 1020536 1036790
median uq max
1 186486 190763 2768193
2 460225 471346 2854592
3 449960 460226 2895653
4 271174 277162 2827218
5 36784 37640 1165105
6 171088 176221 457659
7 1052188 1080417 3939286
is.list(manual.coerce(x))
[1] TRUE