मैं क्यों ऐसा होता है में अंतर्दृष्टि की सराहना करेंगे और कैसे मैं इस अधिक अर्थपूर्ण हो सकती।क्यों sapply एक मैट्रिक्स है कि मैं स्थानांतरित करने के लिए की जरूरत है वापसी करता है, और फिर स्थानांतरित मैट्रिक्स एक dataframe से संलग्न नहीं होगा?
जब मैं sapply उपयोग करते हैं, मुझे यह पसंद है एक 3x2 मैट्रिक्स लौटने के लिए होगा, लेकिन यह एक 2x3 मैट्रिक्स देता है। ऐसा क्यों है? और इसे किसी अन्य डेटा फ्रेम से जोड़ना क्यों मुश्किल है?
a <- data.frame(id=c('a','b','c'), var1 = c(1,2,3), var2 = c(3,2,1))
out <- sapply(a$id, function(x) out = a[x, c('var1', 'var2')])
#out is 3x2, but I would like it to be 2x3
#I then want to append t(out) (out as a 2x3 matrix) to b, a 1x3 dataframe
b <- data.frame(var3=c(0,0,0))
जब मैं इन संलग्न करने के लिए प्रयास करते हैं,
b[,c('col2','col3')] <- t(out)
त्रुटि है कि मैं मिलता है:
Warning message:
In `[<-.data.frame`(`*tmp*`, , c("col2", "col3"), value = list(1, :
provided 6 variables to replace 2 variables
हालांकि निम्नलिखित वांछित परिणाम देने के लिए प्रकट होता है:
rownames(out) <- c('col1', 'col2')
b <- cbind(b, t(out))
मैं वें पर काम नहीं कर सकता ई चर:
b$var1/b$var2
रिटर्न
Error in b$var1/b$var2 : non-numeric argument to binary operator
धन्यवाद!
आप इस डेटा के साथ क्या करने की कोशिश कर रहे हैं से कम से ddply एक नज़र है? आपका उदाहरण वास्तव में कुछ भी सार्थक नहीं करता है। – hadley
@ हैडली: उदाहरण कम से कम, व्यावहारिक उदाहरण प्रदान करने के आर पोस्टिंग दिशानिर्देशों का पालन करता है। वास्तविक मामला बल्कि जटिल है, और जटिलता केंद्रीय प्रश्न से अलग हो जाएगी। एक टायलर श्रृंखला विस्तार का उपयोग कर 20 अलग-अलग पैरामीटर के लिए मॉडल की संवेदनशीलता का अनुमान लगाया गया कार्य, और इनपुट के रूप में 20x8 डेटाफ्रेम स्वीकार करता है। यदि आप चाहें तो मुझे एक पूर्ण पुनरुत्पादित उदाहरण भेजने में खुशी होगी, हालांकि यह अभी तक सार्वजनिक होने के लिए तैयार नहीं है। –
आपको समझने में आसान कुछ और उस समस्या के सार को कैप्चर करने वाले कुछ के बीच एक सुखद माध्यम के लिए प्रयास करने की आवश्यकता है, जिसके साथ आप संघर्ष कर रहे हैं।आपके वर्तमान उदाहरण में ऐसा लगता है कि आप 'बी'' के बराबर होने की कोशिश कर रहे हैं। – hadley