एक और तरीका होगा
do.call("rbind", sapply(1:20, FUN = function(i) c(i+i,i*i,i/1), simplify = FALSE))
[,1] [,2] [,3]
[1,] 2 1 1
[2,] 4 4 2
[3,] 6 9 3
[4,] 8 16 4
[5,] 10 25 5
[6,] 12 36 6
यदि आप simplify = FALSE
निर्दिष्ट नहीं करते हैं, तो आपको t
का उपयोग करके परिणाम स्थानांतरित करना होगा। यह बड़ी संरचनाओं के लिए थकाऊ हो सकता है।
यह समाधान विशेष रूप से आसान है यदि आपके पास बड़ी तरफ डेटा सेट है और/या आपको इसे कई बार दोहराने की आवश्यकता है।
मैं इस "धागे" में समाधान के कुछ समय प्रदान करता हूं।
> system.time(do.call("rbind", sapply(1:20000, FUN = function(i) c(i+i,i*i,i/1), simplify = FALSE)))
user system elapsed
0.05 0.00 0.05
> system.time(ldply(1:20000, function(i)c(i+i, i*i, i/1)))
user system elapsed
0.14 0.00 0.14
> system.time({d <- matrix(nrow=20000, ncol=3)
+ for (i in 1:20000) { d[i,] <- c(i+i, i*i, i/1)}})
user system elapsed
0.10 0.00 0.09
> system.time(ldply(1:20000, function(i)c(i+i, i*i, i/1)))
user system elapsed
62.88 0.00 62.99
स्रोत
2012-06-29 09:31:20
ध्यान दें कि यह शायद कम से कम कुशल समाधान प्रस्तावित है। बहुत छोटे डेटा सेट के लिए इससे कोई फर्क नहीं पड़ता है, लेकिन यदि आप कुशल होना चाहते हैं तो आपको वास्तव में लूप के अंदर आरबीआईंड या सीबिंड का उपयोग नहीं करना चाहिए। – Dason