2010-03-18 14 views
8

मान लीजिए मैं एक मैट्रिक्स foo इस प्रकार के लिए एक मैट्रिक्स परिवर्तित:एक सूची

foo <- cbind(c(1,2,3), c(15,16,17)) 

> foo 
    [,1] [,2] 
[1,] 1 15 
[2,] 2 16 
[3,] 3 17 

मैं इसे एक सूची लग रहा है कि

तरह
[[1]] 
[1] 1 15 

[[2]] 
[1] 2 16 

[[3]] 
[1] 3 17 

आप इसे के रूप में कर सकते हैं में बदल करना चाहते हैं इस प्रकार है:

lapply(apply(foo, 1, function(x) list(c(x[1], x[2]))), function(y) unlist(y))

मैं एक altern में दिलचस्पी रखता हूँ एटिव विधि जो जटिल नहीं है। नोट, अगर आप apply(foo, 1, function(x) list(c(x[1], x[2]))) करते हैं, तो यह एक सूची में एक सूची देता है, जिसे मैं टालने की उम्मीद कर रहा हूं।

उत्तर

14

यहाँ एक क्लीनर समाधान है:

as.list(data.frame(t(foo))) 

तथ्य यह है कि एक डेटा फ्रेम वास्तव में सिर्फ बराबर लंबाई वैक्टर की एक सूची है (जबकि एक मैट्रिक्स वास्तव में एक वेक्टर जो स्तंभ और पंक्तियों के साथ प्रदर्शित किया जाता है का लाभ लेता है यही कारण है कि ... उदाहरण के लिए, आप foo [5] को कॉल करके देख सकते हैं)।

आप भी इस हालांकि यह एक सुधार के ज्यादा नहीं है कर सकता है,:

lapply(1:nrow(foo), function(i) foo[i,]) 
+0

आपका 'as.list()' विधि एकदम सही है। और मेरी विधि से भी तेज़ (0.847 एस बनाम 2.45 एस)। – andrewj

6
library(plyr) 
alply(foo, 1) 
+0

क्या यह एनएक्सएन मैट्रिक्स के लिए भी काम करना चाहिए? –

संबंधित मुद्दे