การใช้ฟังก์ชั่น 'comment' ใน R คืออะไรดี?


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)

นี่เป็นครั้งแรกที่ฉันมาด้วยฟังก์ชั่นนี้และสงสัยว่าการใช้งานทั่วไป / มีประโยชน์คืออะไร เนื่องจากเป็นการยากที่จะค้นหา "ความคิดเห็น R" ใน google และค้นหาผลลัพธ์ที่เกี่ยวข้องฉันจึงหวังว่าจะมีใครบางคนที่นี่อาจแชร์ด้วยประสบการณ์ของเขา


3
ฉันไม่คิดว่าคำถามนี้ต้องเป็น CW จริงๆ มันเป็นเส้นเขตแดน แต่ก็ไม่ได้แย่เกินไป
csgillespie

ข้อมูลที่ดี! (แพคเกจชุดเวลา 'XTS' มีฟังก์ชันการทำงานที่คล้ายกันข้อมูลเมตานี้.)
ดั๊ก

2
คำถามนี้ได้รับการแนะนำสำหรับการปิด: หากคำถามถูกตีความในวงกว้าง (และโปรดทราบว่าไม่มีคำตอบใดที่เฉพาะเจาะจงมากสำหรับ R) นี่เป็นคำถามเกี่ยวกับเวลาและสาเหตุที่ใครต้องการติดป้ายคอลัมน์ของข้อมูล ปัญหาการจัดการข้อมูลประเภทนี้เห็นได้ชัดว่าเป็นส่วนหนึ่งของการปฏิบัติทางสถิติอย่างสม่ำเสมอดังนั้นจึงมีเนื้อหาในหัวข้อที่นี่
Silverfish

คำตอบ:


15

สำหรับ @Gavin ที่สอง Frank Harrell ได้พัฒนาวิธีที่มีประสิทธิภาพในการจัดการ data.frame ที่มีคำอธิบายประกอบใน R ในแพ็คเกจHmiscของเขา ตัวอย่างเช่น, label()และunits()ฟังก์ชั่นอนุญาตให้เพิ่มคุณสมบัติเฉพาะให้กับวัตถุ R ฉันพบว่ามันมีประโยชน์มากเมื่อสร้างสรุป data.frame (เช่นกับdescribe())

อีกวิธีที่มีประโยชน์ในการใช้คุณลักษณะพิเศษนี้คือการใช้การประทับเวลาบนชุดข้อมูล ฉันยังเพิ่มคุณสมบัติสำหรับสิ่งต่าง ๆ เช่นเมล็ดสุ่มหมายเลขพับ (เมื่อฉันใช้ k-kold หรือ LOO ข้ามการตรวจสอบความถูกต้อง)


14

สิ่งหนึ่งที่ฉันมักพบว่าตัวเองทำในสคริปต์ R ของฉันสำหรับงานวิเคราะห์ข้อมูลเฉพาะคือการใส่ความคิดเห็นในสคริปต์เกี่ยวกับหน่วยของตัวแปรในกรอบข้อมูลของฉัน ฉันทำงานกับข้อมูลด้านสิ่งแวดล้อมนักเคมีและนักนิเวศวิทยาดูเหมือนจะสนุกกับการใช้หน่วยต่าง ๆ มากมายสำหรับสิ่งเดียวกัน (mg L vs mu eq Lฯลฯ ) เพื่อนร่วมงานของฉันมักจะเก็บข้อมูลนี้ในแถวด้านล่างชื่อคอลัมน์ในแผ่นงาน Excel- 111

ฉันเห็นcomment()ว่าเป็นวิธีที่ดีในการแนบข้อมูลนี้กับ data frame สำหรับการอ้างอิงในอนาคต


2
โซลูชันมาตรฐานคือการรวมฟิลด์สำหรับหน่วยการวัดเพื่อให้คอมพิวเตอร์สามารถตั้งโปรแกรมให้แปลงผลลัพธ์เชิงตัวเลขทั้งหมดเป็นหน่วยทั่วไป (พารามิเตอร์เฉพาะ) การฝังข้อมูลสำคัญในความคิดเห็นทำให้การใช้ความสามารถนี้ยากหรือเป็นไปไม่ได้
whuber

2
@whuber แต่ R ไม่มีโครงสร้างในนั้นเป็นวัตถุพื้นฐานและฉันไม่ต้องการเขียนทั้งกองของวิธี S4 ในการทำซ้ำกรอบข้อมูลที่ดำเนินการเกี่ยวกับข้อมูลหน่วย โปรดทราบว่าcomment()ไม่ใช่ความคิดเห็นในรหัส มันแนบแอตทริบิวต์ที่เฉพาะเจาะจงกับวัตถุที่สามารถเป็นเวกเตอร์หนึ่งองค์ประกอบต่อคอลัมน์ของกรอบข้อมูลที่มีข้อมูลหน่วย มันง่ายที่จะดึงข้อมูลนี้ออกมาดังนั้นฉันไม่เห็นว่าทำไมการนำสิ่งใดไปใช้จะยากหรือเป็นไปไม่ได้
Reinstate Monica - G. Simpson

1
Gavin ผมบอกบางสิ่งบางอย่างมากที่เรียบง่าย ตัวอย่างเช่นหากบางครั้งมีการบันทึกความเข้มข้นของซีลีเนียมเป็น mg / L และเวลาอื่น ๆ เป็น meq / L คุณสามารถเลือกอินสแตนซ์ทั้งหมดของหลังและคูณความเข้มข้นโดยปัจจัยที่เหมาะสมในการแปลงเป็น mg / L อย่างไรก็ตาม - นี่อาจเป็นแหล่งที่มาของการคัดค้านของคุณ - Rแน่นอนว่าไม่ใช่สถานที่ที่เหมาะสมในการบำรุงรักษาฐานข้อมูลและดำเนินการกระบวนการประเภทนี้แม้ว่าจะสามารถทำได้ มันเสริมที่ดีที่สุดด้วยระบบการจัดการฐานข้อมูลที่ดีสำหรับงานดังกล่าว
whuber

4
สาธุนั่น! comment()et al มีประโยชน์สำหรับบันทึกเฉพาะกิจและข้อมูล แต่จำเป็นต้องมีระบบที่เหมาะสมสำหรับการจัดการข้อมูลขนาดใหญ่ น่าสนใจที่เราต้องกล่าวถึงเรื่องนี้ตอนนี้ภายในกลุ่มวิจัยและที่ปรึกษาที่ฉันทำงานเกี่ยวกับข้อมูลทางเคมีของเราและจำเป็นต้องนำมันไปไว้ในฐานข้อมูลที่เหมาะสม
Reinstate Monica - G. Simpson

8

สิ่งอำนวยความสะดวกที่คล้ายกันอยู่ในแพคเกจอื่น ๆ เช่นคำสั่ง -notes- ใน Stata เราใช้วิธีนี้เพื่อจัดทำเอกสารเต็มรูปแบบรายละเอียดของตัวแปรเช่นรายละเอียดของการทดสอบสำหรับการวัดทางชีวเคมีหรือถ้อยคำที่แน่นอนของคำถามที่ถามหาข้อมูลแบบสอบถาม นี่มักจะเป็นข้อมูลที่มากเกินไปสำหรับชื่อตัวแปรหรือฉลากซึ่งหนึ่งหรือทั้งสองอย่างนั้นจะแสดงในผลลัพธ์ของการวิเคราะห์ทุกครั้งที่เกี่ยวข้องกับตัวแปรดังนั้นจึงควรสั้นที่สุด


4

สิ่งหนึ่งที่ฉันพบว่าตัวเองกำลังทำอะไรมากมายคือการติดตามคำสั่งที่ใช้ในการสร้างข้อมูลและวัตถุและพบว่าข้อคิดเห็นนั้นเป็นเครื่องมือที่มีประโยชน์สำหรับสิ่งนี้

'match.call.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

ให้ฉันแนะนำวิธีแก้ปัญหาทั่วไปของฉันในการจัดการวัตถุใน R: repoแพ็คเกจ คุณสามารถใช้ชื่อแบบยาวคำอธิบายชุดของแท็ก URL ระยะไกลความสัมพันธ์ในการพึ่งพาและแต่ละไฟล์ที่แนบมากับตัวเลขหรือไฟล์ภายนอกทั่วไปแต่ละตัวแปร ตัวอย่างเช่นซอร์สโค้ดสามารถจัดเก็บเป็นรายการที่เก็บและแนบกับทรัพยากรที่ผลิตโดยมัน ค้นหารุ่นเสถียรล่าสุดเกี่ยวกับ CRAN ( install.packages("repo")) หรือการพัฒนาล่าสุดบนGitHub ภาพรวมอย่างรวดเร็วที่นี่ หวังว่ามันจะช่วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.