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
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.
Bit operatörleri ve "endianness&q...
Bu özel durumda, bir kurucu üye başlat...
Atama Docker noktalarına li > ...
Önleme aynı Olay işleyicisi atama bird...
*, /, , -, % Operatörleri kullanmadan ...