मैं lapply() के साथ आर में डेटा फ्रेम को संशोधित कर रहा था और देखा कि मेरा डेटा फ्रेम एक सूची ऑब्जेक्ट में परिवर्तित हो गया था जब मैंने इसे असाइन करने के लिए ब्रैकेट का उपयोग नहीं किया था।

उदाहरण के लिए, निम्नलिखित एक सूची देता है

junk <- data.frame(col1 = 1:3,
                   col2 = c("a,b,c"),
                   col3 = c(T,T,F))

junk <- lapply(junk, function(x) {
    if (is.numeric(x)) return(x*2)
    else return(x)})

str(junk)

जहां निम्नलिखित डेटा फ्रेम देता है।

junk <- data.frame(col1 = 1:3,
                   col2 = c("a,b,c"),
                   col3 = c(T,T,F))

junk[] <- lapply(junk, function(x) {
    if (is.numeric(x)) return(x*2)
    else return(x)})

str(junk)

मैं जानना चाहता हूं कि क्यों [] डेटा फ्रेम संरचना को सुरक्षित रखता है, और इस मामले में [] क्या कर रहा है। मैं समझता हूं कि पहला कोड खंड junk को एक सूची में क्यों परिवर्तित करता है, लेकिन समझ में नहीं आता कि दूसरा खंड संरचना को संरक्षित क्यों करता है, हालांकि मैं प्रश्न/स्थिति का वर्णन करने के लिए स्पष्ट शीर्षक के बारे में नहीं सोच सका। धन्यवाद।

r
4
Collin Ching 11 अक्टूबर 2018, 23:27

1 उत्तर

सबसे बढ़िया उत्तर

lapply के लिए एक सूची वापस करना स्वाभाविक है, क्योंकि यह हमेशा गारंटी नहीं है कि फ़ंक्शन FUN समान आकार के प्रसंस्करण परिणाम देता है।

dat <- data.frame(a = c(1,1,2), b = c(1,1,1))
lapply(dat, unique)

दूसरा मूल डेटा फ्रेम को जगह में संशोधित करके संरचना को संरक्षित नहीं करता है। यह करता है

tmp <- lapply(...); junk[] <- tmp; rm(tmp)
2
李哲源 11 अक्टूबर 2018, 20:35