2014-05-24 7 views
5

हाल ही में मुझे अपने आर कोड में निम्नलिखित समस्या का सामना करना पड़ा। एक फ़ंक्शन में, डेटा फ्रेम को तर्क के रूप में स्वीकार करते हुए, मुझे डेटा फ्रेम के मूल कॉलम के मानों के आधार पर गणना की गई डेटा के साथ एक स्तंभ जोड़ने (या प्रतिस्थापित करना, यदि यह मौजूद है) की आवश्यकता होती है। मैंने कोड लिखा, लेकिन परीक्षण से पता चला कि डेटा फ्रेम ऑपरेशन निकालने/प्रतिस्थापित करने के लिए, जिसके परिणामस्वरूप ऑब्जेक्ट के विशेष (उपयोगकर्ता-परिभाषित) गुणों का नुकसान है।संचालन निकालने/प्रतिस्थापित करने के दौरान ऑब्जेक्ट के गुणों को संरक्षित करने के दृष्टिकोण

: उन्हें उसके बाद बहाल बचत निकालने से पहले गुण/संचालन की जगह और द्वारा -

कि साकार करने और अनुसंधान प्रलेखन (http://stat.ethz.ch/R-manual/R-patched/library/base/html/Extract.html) को पढ़ कर उस व्यवहार की पुष्टि के बाद, मैं बहुत बस समस्या को हल करने का निर्णय लिया

myTransformationFunction <- function (data) { 

    # save object's attributes 
    attrs <- attributes(data) 

    <data frame transformations; involves extract/replace operations on `data`> 

    # restore the attributes 
    attributes(data) <- attrs 

    return (data) 
} 

यह दृष्टिकोण काम किया। हालांकि, गलती से, मैं आर दस्तावेज की एक और टुकड़ा (http://stat.ethz.ch/R-manual/R-patched/library/base/html/Extract.data.frame.html) है, जो प्रदान करता है भर में भाग गया IMHO एक दिलचस्प (और, संभावित, एक अधिक सामान्य?) वैकल्पिक दृष्टिकोण एक ही समस्या को हल करने के लिए:

## keeping special attributes: use a class with a 
## "as.data.frame" and "[" method: 

as.data.frame.avector <- as.data.frame.vector 

`[.avector` <- function(x,i,...) { 
    r <- NextMethod("[") 
    mostattributes(r) <- attributes(x) 
    r 
} 

d <- data.frame(i = 0:7, f = gl(2,4), 
       u = structure(11:18, unit = "kg", class = "avector")) 
str(d[2:4, -1]) # 'u' keeps its "unit" 

मैं करूंगा वास्तव में यहाँ के लोग मदद कर सकता है अगर की सराहना करते हैं द्वारा:

  1. मुकाबले दो उपर्युक्त दृष्टिकोण है, अगर वे तुलनीय (हैं मुझे लगता है कि दूसरा दृष्टिकोण के रूप में परिभाषित डेटा फ्रेम के लिए है, लेकिन मैं इसे किया जा सकता है पर शक किसी के लिए सामान्यीकृत वस्तु);

  2. की व्याख्या वाक्य रचना और दूसरा दृष्टिकोण में समारोह परिभाषा, विशेष रूप से as.data.frame.avector में अर्थ, साथ ही क्या लाइन as.data.frame.avector <- as.data.frame.vector का उद्देश्य है के रूप में।

उत्तर

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

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