R'deki 'comment' işlevinin iyi bir kullanımı nedir?


35

Ben sadece commentR'deki fonksiyonu keşfettim. Örnek:

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

Bu, bu fonksiyona ilk kez geldiğimde ve bunun ortak / yararlı kullanımlarının ne olduğunu merak ediyordum. Google’da "R yorumu" nu aramak ve alakalı sonuçlar bulmak oldukça zor olduğundan, burada birisinin bu deneyimi ile paylaşabileceğini umuyordum.


3
Bu sorunun gerçekten bir CW olması gerektiğini sanmıyorum. Sınırda, ama çok da kötü değil.
csgillespie

harika bilgi! ('xts' zaman serisi paketi bu meta veri işlevselliğine benzer.)
doug

2
Bu soru kapatılması için önerildi: eğer soru geniş ölçüde yorumlandıysa (ve cevapların hiçbirinin R'ye özgü olmadığını unutmayın), bu gerçekten bir kişinin veri sütunlarını ne zaman ve neden etiketlemek istediğiyle ilgili bir sorudur. Bu tür bir veri yönetimi konusu, istatistiksel uygulamanın düzenli bir parçası olduğu için tartışmalı bir konudur.
Silverfish

Yanıtlar:


15

Frank Harrell @ Gavin'den ikinciye, Hmisc paketindeki R'deki açıklamalı data.frame ile başa çıkmak için etkili yollar geliştirdi . Örneğin, label()ve units()işlevleri R nesnelerine özel özellikler eklemenizi sağlar. Onları data.frame'in özetini verirken çok kullanışlı buluyorum (örneğin, ile describe()).

Böyle bir ekstra nitelik kullanmanın başka bir faydalı yolu, bir veri setine zaman damgası uygulamaktır. Ayrıca rastgele tohum, kat sayısı gibi şeyler için bir özellik eklerim (k-kold veya LOO çapraz doğrulama kullandığımda).


14

-1-1

comment()Gelecekte başvurmak için bu bilgiyi bir veri çerçevesine eklemenin iyi bir yolu olarak görüyorum .


2
Standart çözüm, ölçüm birimleri için bir alan içermesidir, böylece bilgisayar tüm sayısal sonuçları ortak (parametreye özgü) birimlere dönüştürmek üzere programlanabilir. Bu çok önemli bilgiyi yorumlara gömmek bu kabiliyetin uygulanmasını zorlaştırıyor veya imkansız hale getiriyor.
whuber

2
@whuber ancak R, temel nesnelerinde böyle bir yapıya sahip değil ve birim bilgiyi taşıyan veri çerçevelerini çoğaltmak için S4 yöntemlerinin bir yığınını yazmak istemiyorum. Kodda comment()yorum olmadığını unutmayın . Bir vektör olabilen nesneye, birimler bilgilerini içeren veri çerçevesinin sütun başına bir elemanı olan belirli bir nitelik ekler. Bu bilgiyi çıkarmak kolaydır, böylece bir şeyi uygulamanın neden zor veya imkansız olacağını anlamıyorum?
Monica'yı eski durumuna getirme - G. Simpson,

1
Gavin, çok daha basit bir şey öneriyorum . Örneğin, bazen selenyum konsantrasyonları mg / L ve diğer zamanlarda meq / L olarak kaydedilmişse, ikincisinin tüm örneklerini kolayca seçebilir ve konsantrasyonu uygun faktör ile mg / L'ye dönüştürmek için çarpabilirsiniz. Ancak - bu itirazınızın kaynağı olabilir - Rkesinlikle veritabanlarını korumak ve bu tür işlemleri gerçekleştirmek için kesinlikle uygun bir yer değil , bunu yapabiliyor olsa da. Bu tür işler için iyi bir veritabanı yönetim sistemi ile desteklenmiştir.
whuber

4
Amin! comment()ve diğerleri özel notlar ve bilgiler için kullanışlıdır, ancak daha büyük ölçekli veri işleme için uygun bir sistem gereklidir. İlginç bir şekilde, şu anda bunu araştırma grubumuzda ve kimya verilerimizle ilgili olarak çalıştığım ve uygun bir veri tabanına girmemiz gereken danışmanlıkla ele almak zorundayız.
Monica’yı eski durumuna getirme - G. Simpson

8

Stata'daki -notes-komutu gibi diğer paketlerde de benzer özellikler bulunmaktadır . Bunu , bir değişkenin tüm ayrıntılarını, örneğin biyokimyasal ölçüm için testin ayrıntılarını veya anket verileri için sorulan sorunun tam ifadesini belgelemek için kullanıyoruz. Bu genellikle değişken ismi veya etiketi için çok fazla bilgidir; bunlardan biri veya her ikisi de değişkeni içeren her analizin çıktısında gösterilir ve bu nedenle en iyi şekilde oldukça kısa tutulur.


4

Kendimi çok bulurken bulduğum şeylerden biri, veri ve nesneler üretmek için kullanılan komutları izlemektir ve yorumu bunun için yararlı bir araç olarak bulduk.

'Matched.call.data' ve 'construc.command.string' bu numarayı yapıyor. Mükemmel değil, ama yardımcı ve 'comment ()' için bir kullanım. :)

# 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

Genel çözümümü R: repopaketindeki nesne yönetimine önermeme izin verin . Kullanarak, her değişkene uzun bir ad, açıklama, bir etiket kümesi, uzak bir url, bağımlılık ilişkileri atayabilir ve ayrıca rakamlar veya genel harici dosyalar ekleyebilirsiniz. Örneğin, kaynak kodu bir depo öğesi olarak saklanabilir ve ürettiği kaynaklara eklenebilir. CRAN son kararlı sürümü (Bul install.packages("repo")) ya da en geç gelişimini github . Hızlı bir bakış burada . Umarım yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.