2012-06-16 18 views
16

Bu beni oldukça kötüleştirdi. Liste isimlerini kısaltabilir misin? Daha önce hiç fark etmedim ve bir gün gibi berbat oldum. Birisi burada olup bitenleri ve neden korkunç olduğundan daha kullanışlı olabileceğini açıklayabilir mi? Ve neden onun altındaki tutarsız? Ve eğer onu kapatabilir miyim?Liste isimlerini kısaltabilirsiniz? Niye ya?

madde için tam bir eşleşme varsa, kullanın:

listesi eleman isimleri (ve işlev parametresi isimler) için
> wtf <- list(whatisthe=1, pointofthis=2) 
> wtf$whatisthe 
[1] 1 
> wtf$what 
[1] 1 

> wtf <- list(whatisthe=1, whatisthepointofthis=2) 
> wtf$whatisthepointofthis 
[1] 2 
> wtf$whatisthep 
[1] 2 
> wtf$whatisthe 
[1] 1 
> wtf$what 
NULL 
+5

Bu tutarsız değil. Yalnızca bir eşleşme varsa, isimlerin önde gelen alt dizeleri çözülür. –

+1

+1 hakkında düşünmemi sağladığın için * neden * '$' bu şekilde uygulanmaktadır. –

+0

Bu, Bell laboratuarlarında S'nin en erken günlerine kadar uzanır. Bu kötü bir şey, ama bazen yazarak kaydetmek için bazen kullanıyorum. Ayrıca işlev argümanlarında çalışır, Örneğin '' predik (m, type = "resp") 'veya' cor (x, y, use = "pair") '. –

cevap

16

Ben $ operatör tarafından kısmi eşleştirme geri önce sekmeli tamamlama

gerçekleştirilmiş olmasına günlerde o davranışı beğenmezseniz interaktif kullanım için güzel bir (r) özelliği olduğunu sanıyorum, kullanabilirsiniz Bunun yerine "[[" operatörü. Bu, kısmi eşleme davranışını denetlemenizi ve TRUE varsayılan değerlerini denetlemenizi sağlayan exact= argümanını alır.

wtf[["whatisthep"]]     # Only returns exact matches 
# NULL 

wtf[["whatisthep", exact=FALSE]] # Returns partial matches without warning 
# [1] 2 

wtf[["whatisthep", exact=NA]]  # Returns partial matches & warns that it did 
# [1] 2 
# Warning message: 
# In wtf[["whatisthep", exact = NA]] : 
# partial match of 'whatisthep' to 'whatisthepointofthis' 

(Bu "[[" genellikle R programlamada $ tercih edilir nedenlerinden biri. Bir başka bu X <- "whatisthe"; wtf[[X]] şeyi yapma olanağı ama değil bu X <- "whatisthe"; wtf$X.)

+0

Harika, teşekkürler. Eminim otomatik tamamlayıcının yardımcı olması gerekiyordu, ama sadece uğursuz bir his. Sadece tekrar ısırmasını bekliyorum. – enfascination

+0

@ user1073999 - Kabul ediyorum. Hatta bazı R prensiplerinin erken tasarım kararının olduğunu düşündüm ama şimdi nerede olduğunu hatırlayamıyorum. Bunu gören başka biri ile ilgilenirdim. –

+2

Daha fazla düşündüğümde, sekmeli otomatik tamamlama gerçekleştirilmeden önce etkileşimli kullanımda yararlı olacağını görebiliyorum. –

2

, R aşağıdaki algoritmayı geçerlidir. Tam bir eşleşme yoksa, kısmi eşleşmeleri arayın. Tam olarak bir kısmi eşleşme varsa, onu kullanın. Aksi halde, hiçbir şey kullanmayın.

+0

Bence tam algoritma aynı zamanda konumsal eşleştirmeyi kullanıyor. – Andrie

+0

Detaylandırır mısınız? Örneğin, '> a <- function (aa, ab) {paste (aa, ab, sep = "")}' '> a (a = 1, a = 2)' 'hatası (a = 1, a = 2): çoklu argüman ' –

+0

ile eşleştirilmiş resmi argüman' aa 'argüman ismini vermek zorunda değilsiniz, bu durumda R konumsal eşleme kullanır. Argüman isimleri ve isimleri olmayan bir vakayı karıştırabileceğinden, bence bu konuda tam bir cevap belirtilmelidir. Yani, örneğinizde 'a (1, ab = 2)' gibi çalışır, (a (ab = 2, 1) 'gibi). – Andrie

İlgili konular