R에서 '주석'기능을 잘 사용하는 것은 무엇입니까?


35

방금 commentR 에서 함수를 발견 했습니다. 예 :

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 댓글"을 검색하고 관련 결과를 찾기가 매우 어려우므로 여기 누군가가 자신의 경험을 공유하기를 바랍니다.


3
이 질문이 실제로 CW 여야한다고 생각하지 않습니다. 경계선이지만 그렇게 나쁘지는 않습니다.
csgillespie

좋은 정보! 시계열 패키지 'xts'는이 메타 데이터 기능과 유사합니다.
더그

2
이 질문은 종결을 위해 제안되었습니다. 질문이 광범위하게 해석되면 (그리고 R 답변과 관련된 답변이 거의 없음에 유의하십시오), 이것은 데이터 열에 언제, 왜 레이블을 붙이기를 원하는지에 대한 질문입니다. 이러한 종류의 데이터 관리 문제는 분명히 통계 실무의 일반적인 부분이므로 여기서는 주제에 대해 논할 것입니다.
Silverfish

답변:


15

두 번째 @Gavin을 위해 Frank Harrell은 Hmisc 패키지 에서 R의 주석이 달린 data.frame 을 처리하는 효율적인 방법을 개발했습니다 . 예를 들어, label()units()함수를 사용하면 R 객체에 전용 속성을 추가 할 수 있습니다. data.frame 요약을 생성 할 때 매우 편리합니다 (예 : with describe()).

이러한 추가 속성을 사용하는 또 다른 유용한 방법은 데이터 세트에 타임 스탬프를 적용하는 것입니다. 또한 무작위 시드, 폴드 번호 (k-kold 또는 LOO 교차 검증을 사용할 때)와 같은 속성을 추가합니다.


14

11

comment()나중에 참조 할 수 있도록이 정보를 데이터 프레임에 첨부하는 좋은 방법으로 보았습니다 .


2
표준 솔루션은 측정 단위에 대한 필드를 포함하여 모든 수치 결과를 공통 (매개 변수 별) 단위로 변환하도록 컴퓨터를 프로그래밍 할 수 있습니다. 주석에이 중요한 정보를 묻 으면이 기능을 구현하기가 어렵거나 불가능 해집니다.
whuber

2
@ whuber 그러나 R은 기본 객체에 그러한 구성을 가지고 있지 않으며 단위 정보를 전달하는 데이터 프레임을 재생하기 위해 S4 메소드의 전체 스택을 작성하고 싶지 않습니다. 참고 comment()없는 코드에 코멘트. 단위 정보를 포함하는 데이터 프레임의 열당 하나의 요소 인 벡터가 될 수있는 특정 속성을 객체에 첨부합니다. 이 정보를 쉽게 추출 할 수 있으므로 왜 구현이 어렵거나 불가능한지 알 수 없습니까?
복원 Monica Monica-G. Simpson

1
개빈, 나는 훨씬 더 간단한 것을 제안하고있다 . 예를 들어, 때때로 셀레늄 농도가 mg / L로 기록되고 다른 경우에는 meq / L로 기록되는 경우, 후자의 모든 사례를 쉽게 선택하고 농도에 적절한 인자를 곱하여 mg / L로 변환 할 수 있습니다. 그러나 이것이 귀하의 이의 제기의 원인이 될 수 있습니다. 데이터베이스를 유지 관리하고 이러한 유형의 프로세스를 수행 할 수는 있지만 R반드시 올바른 장소가 아닙니다 . 그러한 작업을 위해서는 훌륭한 데이터베이스 관리 시스템이 가장 좋습니다.
whuber

4
아멘! comment()et al은 임시 메모 및 정보에 편리하지만 대규모 데이터 처리에는 적절한 시스템이 필요합니다. 흥미롭게도 우리는 현재 화학 데이터와 관련하여 연구 그룹과 컨설팅 내에서이 문제를 해결하고 적절한 데이터베이스로 가져와야합니다.
복원 Monica Monica-G. Simpson

8

Stata-notes- 명령 과 같은 다른 패키지에도 유사한 기능이 있습니다 . 이를 사용 하여 변수의 전체 세부 사항, 예를 들어 생화학 적 측정에 대한 분석 세부 사항 또는 설문지 데이터에 대한 질문의 정확한 표현 을 문서화 합니다. 이것은 종종 변수 이름이나 레이블에 대한 정보가 너무 많으며, 둘 중 하나 또는 둘 다 변수와 관련된 모든 분석 결과에 표시되므로 합리적으로 짧게 유지하는 것이 가장 좋습니다.


4

내가 많이하는 일 중 하나는 데이터와 객체를 생성하는 데 사용되는 명령을 추적하는 것이며 주석이 유용한 도구라는 것을 알았습니다.

'matched.call.data'및 'generate.command.string'이 트릭을 수행합니다. 완벽하지는 않지만 도움이되며 'comment ()'를 사용하십시오. :)

# 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.