आर में 'टिप्पणी' फ़ंक्शन का एक अच्छा उपयोग क्या है?


35

मैंने commentआर। उदाहरण में फ़ंक्शन की खोज की :

x <- matrix(1:12, 3,4)
comment(x) <- c("This is my very important data from experiment #0234",
                "Jun 5, 1998")
x
comment(x)

यह पहली बार है जब मैं इस समारोह में आया था और सोच रहा था कि इसके सामान्य / उपयोगी उपयोग क्या हैं। चूँकि Google में "R comment" खोजना और प्रासंगिक परिणाम प्राप्त करना काफी कठिन है, मैं उम्मीद कर रहा था कि यहाँ कोई व्यक्ति अपने अनुभव के साथ साझा कर सकता है।


3
मुझे नहीं लगता कि इस प्रश्न को वास्तव में सीडब्ल्यू होना चाहिए। यह सीमावर्ती है, लेकिन यह बहुत बुरा नहीं है।
csgillespie

महान जानकारी! (समय श्रृंखला पैकेज 'xts' में इसी मेटाडेटा कार्यक्षमता समान है।)
doug

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

जवाबों:


15

दूसरे @Gavin के लिए, फ्रैंक हैरेल ने अपने Hmisc पैकेज में R में एनोटेट डेटा.फ्रेम को संभालने के लिए कुशल तरीके विकसित किए हैं । उदाहरण के लिए, label()और units()फ़ंक्शंस आर ऑब्जेक्ट्स में समर्पित विशेषताओं को जोड़ने की अनुमति देते हैं। मैं उन्हें बहुत उपयोगी लगता हूं जब डेटा का सारांश (उदाहरण के साथ describe()) का उत्पादन करते हैं ।

इस तरह की एक अतिरिक्त विशेषता का उपयोग करने का एक और उपयोगी तरीका डेटा सेट पर टाइमस्टैम्प लागू करना है। मैं यादृच्छिक बीज, गुना संख्या (जब मैं के-कोल्ड या एलओओ क्रॉस-सत्यापन का उपयोग करता हूं) जैसी चीजों के लिए एक विशेषता जोड़ता हूं।


14

एक बात जो मैं अक्सर खुद को अपनी R लिपियों में किसी विशेष डेटा विश्लेषण कार्य के लिए करता हूं, वह है कि स्क्रिप्ट में टिप्पणियों को अपने डेटा फ़्रेम में चर की इकाइयों के बारे में शामिल करना। मैं पर्यावरणीय डेटा और केमिस्ट के साथ काम करता हूं और इकोलॉजिस्ट एक ही चीज़ (mg L बनाम म्यू eq L , आदि) के लिए विभिन्न इकाइयों की एक विस्तृत श्रृंखला का उपयोग करके आनंद लेते प्रतीत होते हैं । मेरे सहयोगी आमतौर पर इस जानकारी को एक्सेल शीट में कॉलम नामों के ठीक नीचे पंक्ति में संग्रहीत करते हैं।-1-1

मैं comment()इस जानकारी को भविष्य के संदर्भ के लिए डेटा फ्रेम में संलग्न करने का एक अच्छा तरीका के रूप में देखूंगा ।


2
मानक समाधान माप की इकाइयों के लिए एक क्षेत्र को शामिल करना है, ताकि कंप्यूटर को सभी संख्यात्मक परिणामों को आम (पैरामीटर-विशिष्ट) इकाइयों में परिवर्तित करने के लिए प्रोग्राम किया जा सके। टिप्पणियों में इस महत्वपूर्ण जानकारी को दफन करना इस क्षमता को लागू करना मुश्किल या असंभव बनाता है।
रात at:४६ पर फुसफुसाए

2
@whuber लेकिन R का आधार ऑब्जेक्ट्स में ऐसा निर्माण नहीं है और मैं यूनिट जानकारी के आसपास ले जाने वाले डेटा फ़्रेमों को पुन: पेश करने के लिए S4 विधियों का संपूर्ण स्टैक लिखना नहीं चाहता। ध्यान दें कि comment()कोड में टिप्पणी नहीं है। यह ऑब्जेक्ट के लिए एक विशिष्ट विशेषता को जोड़ता है जो एक वेक्टर हो सकता है, डेटा जानकारी के कॉलम के प्रति एक तत्व जिसमें यूनिट जानकारी होती है। यह जानकारी निकालना आसान है इसलिए मैं यह नहीं देखता कि कुछ भी लागू करना मुश्किल या असंभव क्यों होगा?
मोनिका की बहाली - जी। सिम्पसन

1
गेविन, मैं बहुत सरल कुछ सुझा रहा हूँ । उदाहरण के लिए, यदि कभी-कभी सेलेनियम सांद्रता mg / L और अन्य समय में meq / L के रूप में दर्ज की जाती है, तो आप बाद के सभी उदाहरणों को आसानी से चुन सकते हैं और इसे mg / L में बदलने के लिए उपयुक्त कारक द्वारा एकाग्रता को गुणा कर सकते हैं। हालांकि - यह आपकी आपत्ति Rका स्रोत हो सकता है - निश्चित रूप से डेटाबेस बनाए रखने और इस प्रकार की प्रक्रियाओं को करने के लिए सही जगह नहीं है, भले ही वह ऐसा करने में सक्षम हो। यह इस तरह के काम के लिए एक अच्छा डेटाबेस प्रबंधन प्रणाली द्वारा सबसे अच्छा पूरक है।
whuber

4
उसे स्वीकार करें! comment()एट अल तदर्थ नोट्स और जानकारी के लिए काम कर रहे हैं, लेकिन बड़े पैमाने पर डेटा हैंडलिंग के लिए एक उचित प्रणाली की आवश्यकता है। दिलचस्प बात यह है कि हम इसे अब अनुसंधान समूह और परामर्श के भीतर संबोधित करने जा रहे हैं जो मैं अपने रसायन विज्ञान के आंकड़ों और इसे एक उचित डेटाबेस में लाने की आवश्यकता के संबंध में काम करता हूं।
मोनिका की बहाली - जी। सिम्पसन

8

अन्य पैकेजों में भी इसी तरह की सुविधाएं मौजूद हैं, जैसे कि -टाटा में कमांड-कमान । हम इसका उपयोग किसी चर के पूर्ण विवरण, उदाहरण के लिए जैव रासायनिक माप के लिए परख का विवरण, या प्रश्नावली डेटा के लिए पूछे गए प्रश्न के सटीक शब्दों का उपयोग करने के लिए करते हैं। यह अक्सर चर नाम या लेबल के लिए बहुत अधिक जानकारी होती है, जिसमें से एक या दोनों को चर को शामिल करने वाले हर विश्लेषण के आउटपुट में प्रदर्शित किया जाता है और इसलिए इसे यथोचित रूप से छोटा रखा जाता है।


4

चीजों में से एक मैं खुद को बहुत कुछ करता हुआ पा रहा हूं, डेटा और ऑब्जेक्ट्स को उत्पन्न करने के लिए उपयोग किए जाने वाले कमांड को ट्रैक कर रहा है, और टिप्पणी को इसके लिए उपयोगी उपकरण माना है।

'मिलान .all.data' और 'generate.command.string' चाल करते हैं। सही नहीं, लेकिन सहायक और 'टिप्पणी ()' के लिए एक उपयोग। :)

# Comments only accept strings...
# Substituting the escaped quotes ('\"') makes it prettier.
generate.command.string <- function( matched.call.data )
{
  command.string <- as.character( bquote( .( list( matched.call.data ) ) ) )
  sapply( bquote( .(command.string) ),
                  USE.NAMES=FALSE,
                  function( x )
                    gsub( "\\\"", "\'", as.list( match.call() )$x )[[2]] )
}

# Some generating function...
generate.matrix <- function( nrows, ncols, data=NA ) {
  # Some generated object
  mat <- matrix( data= data, nrow= nrows, ncol= ncols )

  matched.call.data <- do.call( "call",
                                c( list( as.character( match.call()[[1]] ) ),
                                lapply( as.list( match.call() )[-1], eval ) ) )
  comment( mat ) <- c( Generated= date(),
                       Command = generate.command.string( matched.call.data ) )

  mat
}

# Generate an object with a missing argument.
emptyMat <- generate.matrix( nrows=2, ncols=2 )
comment( emptyMat )

# Generate without formally stating arguments.
dataMat <- generate.matrix( 2, 2, sample(1:4, 4, replace= TRUE ) )
comment( dataMat )

# And with a longer command.
charMat <- generate.matrix( 3, 3,
                  c( 'This', 'is', 'a', 'much', 'longer',
                     'argument', 'section', 'that', 'wraps') )
comment( charMat )

# And with a variable.
myData <- c( 'An', 'expanded', 'command', 'argument')
charMat2 <- generate.matrix( 2, 2, myData )
comment( charMat2 )

# Create a new object from an original command.
Sys.sleep(1)
emptyMat2 <- eval( parse( text= comment( emptyMat )[['Command']] ) )
dataMat2 <- eval( parse( text= comment( emptyMat )[['Command']] ) )

# Check equality of the static matrices.
identical( emptyMat, emptyMat2 )

# The generation dates are different.
all.equal( emptyMat, emptyMat2, check.attributes= FALSE )
comment( emptyMat )['Generated'] <- NA
comment( emptyMat2 )['Generated'] <- NA
identical( emptyMat, emptyMat2 )

# Command argument structure still works too.
str( as.list( match.call(
  generate.matrix, parse( text=comment( charMat2 )[[ 'Command' ]] ) ) )[-1] )

2

मुझे repoपैकेज में ऑब्जेक्ट प्रबंधन के लिए अपना सामान्य समाधान सुझाने की अनुमति दें: पैकेज। इसका उपयोग करते हुए, आप प्रत्येक चर को एक लंबा नाम, एक विवरण, टैग का एक सेट, एक दूरस्थ यूआरएल, निर्भरता संबंध और यह भी आंकड़े या सामान्य बाहरी फ़ाइलों को संलग्न कर सकते हैं। उदाहरण के लिए, स्रोत कोड को भंडार आइटम के रूप में संग्रहीत किया जा सकता है और इसके द्वारा उत्पादित संसाधनों से जुड़ा हो सकता है। (क्रैन पर नवीनतम स्थिर रिलीज का पता लगाएं install.packages("repo")) या के बारे में नवीनतम विकास GitHub । एक त्वरित अवलोकन यहाँ । आशा करता हूँ की ये काम करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.