SORU
25 Mart 2012, Pazar


R, neden `[` daha iyi `alt`?

Bir veri süzmek istiyorum.çerçeve, yani, belirli koşulları karşılayan satırları ayıklamak, subset işlevi kullanmayı tercih ederim:

subset(airquality, Month == 8 & Temp > 90)

yerine [ fonksiyon:

airquality[airquality$Month == 8 & airquality$Temp > 90, ]

Benim tercih için iki ana nedeni vardır:

  1. Kodu daha iyi okur, sağdan sola doğru buluyorum. Hatta R hakkında hiçbir şey bilmeyen insanlar subset yukarıdaki açıklama yaptığını söyleyebilir.
  2. Sütunlar select ifadede değişkenler olarak adlandırılır, çünkü, bir kaç tuşa basarak kurtarabilirim. Benim örnekte, ben sadece subset ama [ ile üç kez yazın airquality Bir zamanlar vardı.

Mutlu bir hayat, daha kısa ve daha iyi okur çünkü her yerde subset kullanarak, hatta adam R benim kodlayıcıları için güzelliği savunan bendim. Ama dün benim dünyam ayrı kırdı. subset belgeleri okurken, bu bölüm fark ettim:

Uyarı

Bu kolaylık bir fonksiyonu etkileşimli olarak kullanmak için tasarlanmıştır. Daha iyi standart gömmeyi işlevleri gibi kullanmak programlama için [ve özellikle değişken standart dışı değerlendirme alt beklenmedik sonuçları olabilir.

Birine yazar demek istediğimi açıklamak yardımcı olabilir mi?

Onlar derken ne demek istiyorsunuz " . ilk ^em>etkileşimli olarak kullanmak için"? TOPLU modunda komut çalıştırmak için farklı olarak etkileşimli bir oturumun ne olduğunu biliyorum, ama yapmak gerekir anlamıyorum.

, Açıklar mısınız " . sonra ^em>bağımsız değişken alt kümesinin standart dışı bir değerlendirme" ve neden tehlikeli, belki bulunur bir örnek?

Teşekkür ederim!

CEVAP
25 Mart 2012, Pazar


Bu soru @James, subset tehlikelerin Hadley Wickham (ve bunun gibi işlevleri) tarafından mükemmel bir açıklama gösteren [here] yorumlar iyi cevap oldu. Oku!

Biraz uzun, okumak, burada Hadley en doğrudan soru adreslerini kullanan bir örnek kaydetmek için yararlı olabilir, böylece "ne yanlış gidebilir ki?":

Hadley aşağıdaki örnek göstermektedir: alt ve veri çerçevesi aşağıdaki işlevleri kullanarak yeniden düzenlemek istiyoruz varsayalım:

scramble <- function(x) x[sample(nrow(x)), ]

subscramble <- function(x, condition) {
  scramble(subset(x, condition))
}

subscramble(mtcars, cyl == 4)

Bu hatayı döndürür:

Eval(ifade, çevre, enclos) hata: 'position' bulunamadı . nesne

R artık, çünkü "nesnesi olarak nerede"''. silindir bilir O da şans eseri bir nesne çağrılırsa olabilir orada gerçekten tuhaf şeyleri işaret 'position' küresel ortam:

cyl <- 4
subscramble(mtcars, cyl == 4)

cyl <- sample(10, 100, rep = T)
subscramble(mtcars, cyl == 4)

(Onları çalıştırmak ve kendiniz görün, çok çılgınca bir şey.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Day9TV

    Day9TV

    22 NİSAN 2010
  • EatingIn

    EatingIn

    12 EKİM 2013
  • ethr95awd

    ethr95awd

    8 Kasım 2006