ave
समारोह के माध्यम से देख रहे हैं, मैं एक उल्लेखनीय लाइन पाया। मुझे उम्मीद थी कि split(x,g)
परिणामस्वरूप एक सूची होगी, जिसे असाइन किया जा सकता है, लेकिन बाद में त्याग दिया जा सकता है। मेरा सवाल है, x
का मूल्य क्यों बदलता है?असाइनमेंट में परिवर्तन चर
एक और उदाहरण बेहतर समझा जा सकता है:
a <- data.frame(id=c(1,1,2,2), value=c(4,5,7,6))
# id value
# 1 1 4
# 2 1 5
# 3 2 7
# 4 2 6
split(a,a$id) # Split a row-wise by id into a list of size 2
# $`1`
# id value
# 1 1 4
# 2 1 5
# $`2`
# id value
# 3 2 7
# 4 2 6
# Find the row with highest value for each id
lapply(split(a,a$id),function(x) x[which.max(x$value),])
# $`1`
# id value
# 2 1 5
# $`2`
# id value
# 3 2 7
# Assigning to the split changes the data.frame a!
split(a,a$id)<-lapply(split(a,a$id),function(x) x[which.max(x$value),])
a
# id value
# 1 1 5
# 2 1 5
# 3 2 7
# 4 2 7
इतना ही नहीं a
बदल गया है, लेकिन यह है कि काम के दाहिने हाथ की ओर की तरह नहीं दिखता एक मूल्य के लिए बदल! यहां तक कि split(a,a$id)
को असाइन करने पर भी a
(जो मुझे समझ में नहीं आता है) बदलता है, तो list
के बजाय data.frame
क्यों होता है?
ध्यान दें कि मैं समझता हूं कि इस कार्य को पूरा करने के बेहतर तरीके हैं। मेरा सवाल है कि split(a,a$id)<-lapply(split(a,a$id),function(x) x[which.max(x$value),])
a
क्यों बदलता है?
जो फ़ंक्शन आप कॉल कर रहे हैं वह 'विभाजित <-' है,' split' नहीं। वे दो अलग-अलग कार्य हैं। 'विभाजित <- डिफ़ॉल्ट' देखें और यह स्पष्ट है कि 'ए 'क्यों बदलता है। –
और आपको फ़ंक्शन प्रिंट करने के लिए बैकक्वॉट्स का उपयोग करना होगा क्योंकि फ़ंक्शन नाम में ऑपरेटर होता है: '\' विभाजन <- डिफ़ॉल्ट \ ''। –
मैं यह मामला, प्रासंगिक कार्य \ \ 'विभाजित नहीं होगा <-। Data.frame \' '? – nograpes