SORU
16 Kasım 2009, PAZARTESİ


Ar-atama operatörleri: '=' ve '<-'

Atama operatörleri farklılıklar nelerdir '=' ve '&; lt R? Operatörler bu örnekte görüldüğü gibi biraz farklı olduğunu biliyorum

> x <- y <- 5
> x = y = 5
> x = y <- 5
> x <- y = 5
Error in (x <- y) = 5 : could not find function "<-<-"

Ama tek fark var mı?

CEVAP
16 Kasım 2009, PAZARTESİ


assignment operators farkı onları bir bağımsız değişken bir işlev çağrısı değerini ayarlamak için kullandığınızda daha net. Örneğin:

median(x = 1:10)
x   
## Error: object 'x' not found

Bu durumda, x işlevi kapsamında ilan edilir, böylece kullanıcı çalışma alanında mevcut değil.

median(x <- 1:10)
x    
## [1]  1  2  3  4  5  6  7  8  9 10

Bu durumda, x kullanıcı çalışma alanında ilan edilir, bu yüzden işlev çağrısı tamamlandıktan sonra kullanabilirsiniz.


Çok S-Plus eski sürümleri ile uyumluluk için atama (fonksiyon imzaları dışında) ' <- ' kullanarak R toplum arasında genel bir tercihi var. Boşluk gibi durumlar açıklığa kavuşturmak için yardımcı unutmayın

x<-3
# Does this mean assignment?
x <- 3
# Or less than?
x < -3

En R IDEs ' <- ' yazın kolaylaştırmak için klavye kısayolları var. Emacs ESS Mimar,ALT - RStudio,SHIFT - içinde 15* = * (alt çizgi).


Eğer tercih yazma = <- ama istiyorum kullanmak için daha fazla ortak sembol atama için genel olarak yayımlanmış kod (KIZIL, örneğin), sonra birini kullanabilirsiniz tidy.* fonksiyonları formatR paket otomatik olarak değiştirin. = <-.

library(formatR)
tidy.source(textConnection("x = 1:5"), replace.assign = TRUE)
## x <- 1:5

Bu sorunun cevabı, "Neden x <- y = 5 bir hata atmak ama x <- y <- 5?" "aşağı sihirli çözümleyici kontrol altında". R sözdizimi bir şekilde çözülmemiş olması many ambiguous cases içerir. Çözümleyici farklı siparişler = <- kullanılıp kullanılmadığını bağlı olarak ifade bitleri gidermek için seçer.

Neler olduğunu anlamak için, atama sessizce atanan değeri döndürür olduğunu bilmeniz gerekir. Daha açık bir şekilde açıkça, örneğin print(x <- 2 3) Basım görebilirsiniz.

İkinci olarak, eğer atama için önek gösterimini kullanırsak daha net. Bu yüzden

x <- 5
`<-`(x, 5)  #same thing

y = 5
`=`(y, 5)   #also the same thing

Çözümleyici x <- y <- 5 yorumlar

`<-`(x, `<-`(y, 5))

x <- y = 5 sonra olacağını bekliyoruz

`<-`(x, `=`(y, 5))

ama aslında olarak yorumlanır alır

`=`(`<-`(x, y), 5)

Neden bu olur emin değilim, = is higher precedence than <- beri. Belki çözümleyici bir hata, ama iyi şanslar almaya çalışırken şimdi değişti.

documentation is wrong. = aslında düzeni beklenmedik şekilde farklıdır ediliyor <-, daha yüksek önceliğe sahiptir.

?Syntax yardım sayfası = <- daha düşük bir öncelik olduğunu doğru bir şekilde gösterir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • eyes4beautee

    eyes4beautee

    17 HAZİRAN 2011
  • Michael Zhang

    Michael Zhan

    8 EYLÜL 2012
  • Pál Zoltán Illés

    Pál Zoltán

    30 NİSAN 2007