2014-11-25 17 views
7

Kişisel kullanım için aşağıdaki işlevleri kullanıyorum. Makinemin herhangi bir paketinin olup olmadığını görmek için bir yazarın ismini alır.Neden rownames (installed.packages()) bir ad özelliğine sahip?

authoredPackages <- function (author) 
{ 
    s <- sapply(rownames(installed.packages()), 
     packageDescription, fields = "Author") 
    names(grep(author, s, value = TRUE)) 
} 

İşte sorun. Yeni bir R oturumu açıldıktan ve işlevi atadıktan sonra, işlevine her zaman işlevinin ilk çağrısı boş dizelerin karakter vektörünü döndürmesi gereken vektörün doğru uzunluğunu döndürür. Bunu göstermek için yeni bir R oturumu açın, işlevi atayın ve en sevdiğiniz paket yazarının soyadını kullanarak çalıştırın. Her zaman ilk çağrıda olur

authoredPackages("Temple Lang") 
# [1] "jsonlite" "RCurl" "RJSONIO" "XML"  

... İlk ... ...

authoredPackages("Temple Lang") 
# [1] "" "" "" "" 

boş karakter vektör dönmelidir ve sonra tekrar yapmak ve doğru sonuç döndürür yeni bir R oturumunda. Bu neden oluyor, ve nasıl düzeltebilirim ki fonksiyon her zaman ilk denemede çalışır?

Benim R --vanilla seans bilgisi:

R version 3.1.1 (2014-07-10) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    
[3] LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8  
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 
[7] LC_PAPER=en_US.UTF-8  LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 

Güncelleme: Ar açılması üzerine, rownames(installed.packages()) çünkü lme4 paketinin bir names niteliği vardır gibi görünüyor. Neden olduğundan emin değilsin ve tek isim. İkinci çağrıda nasıl kaybolduğunu da çok garip. rownames(installed.packages()) diyorsunuz ilk defa öznitelik bir names varmış gibi

rownames(installed.packages())[228] 
# ret0 
# "lme4" 
+1

R - vanilla ile mi çalışıyorsunuz? 'SessionInfo() '? benim için 'authoredPackages() 'R sürüm 3.1.2 için beklendiği gibi çalışır (2014-10-31 r66919)/Platform: x86_64-unknown-linux-gnu (64-bit) ve R Under development (kararsız) (2014- 11-23 r67046)/Platform: x86_64-unknown-linux-gnu (64-bit) –

+2

, 'install.packages' kaynağında 'ret0' ifadesinden bahsedilir; işlevin sonuna doğru noCache = FALSE; Belki de "noCache = TRUE" ifadesini argüman olarak eklemek bir iştir? –

+1

@MartinMorgan: Güzel tahmin, ancak 'noCache = TRUE 'ekleme bana yine aynı garip sonuçları veriyor. –

cevap

7

Garip ama görünüyor.

> str(rownames(installed.packages())) 
Named chr [1:125] "bdsmatrix" "bitops" "blotter" "brew" "car" "changepoint" "chron" "colorout" ... 
- attr(*, "names")= chr [1:125] "" "" "" "" ... 
> str(rownames(installed.packages())) 
chr [1:125] "bdsmatrix" "bitops" "blotter" "brew" "car" "changepoint" "chron" "colorout" "colorspace" ... 

Maalesef bu soruya cevap size bıraktı. Sadece isim olmadığından emin ol. Bu sizin için bir sorundur çünkü'un USE.NAMES=TRUE varsayılanına güveniyorsunuz, ancak bunlar henüz mevcut değilse yalnızca adlar ekler. Ve gerçekten tuhaf bir sebep için mevcutlar.

authoredPackages <- function (author) 
{ 
    r <- setNames(rownames(installed.packages()), NULL) 
    s <- sapply(r, function(x) packageDescription(x)$Author) 
    names(grep(author, s, value = TRUE)) 
} 

İşte benim sessionInfo (R --vanilla ile başlayan itibaren) var:

> sessionInfo() 
R version 3.1.1 (2014-07-10) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    
[3] LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8  
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 
[7] LC_PAPER=en_US.UTF-8  LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

loaded via a namespace (and not attached): 
[1] tools_3.1.1 

Sadece R-3.1.2 yükseltilmiş ve tekrar denedi. Yine aynı garip sonuçları alıyorum ve 'un noCache=TRUE'u kullanması önerisini kullanırsam tutarlı bir şekilde alıyorum.

> str(rownames(installed.packages(noCache=TRUE))) 
Named chr [1:125] "bdsmatrix" "bitops" "blotter" "brew" "car" "changepoint" "chron" "colorout" ... 
- attr(*, "names")= chr [1:125] "" "" "" "" ... 
> str(rownames(installed.packages(noCache=TRUE))) 
Named chr [1:125] "bdsmatrix" "bitops" "blotter" "brew" "car" "changepoint" "chron" "colorout" ... 
- attr(*, "names")= chr [1:125] "" "" "" "" ... 
> str(rownames(installed.packages(noCache=TRUE))) 
Named chr [1:125] "bdsmatrix" "bitops" "blotter" "brew" "car" "changepoint" "chron" "colorout" ... 
- attr(*, "names")= chr [1:125] "" "" "" "" ... 
> sessionInfo() 
R version 3.1.2 (2014-10-31) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8  
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8  LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] setwidth_1.0-3 colorout_1.0-1 

loaded via a namespace (and not attached): 
[1] tools_3.1.2 
İlgili konular