SORU
5 HAZİRAN 2012, Salı


Global ve yerel değişkenler R

R için bir acemi olduğumu ve R. yerel ve genel değişkenler kullanımı ile karıştı oldukça

Okuduğum bazı yazılarda internet söylersen kullanıyorum = <- ben atama değişken mevcut ortam ve <<- ben access global değişken zaman içinde bir işlev.

C yerel değişkenler parantez içinde bir değişken bildirmek ne zaman ortaya hatırladığım kadarıyla ancak {}, Eğer öyleyse bu R için aynı olup olmadığını merak ediyorum? Yoksa sadece içindirfonksiyonlaryerel değişkenler kavramı var R.

Sadece parantez yeterli olmadığını önermek gibi görünüyor küçük bir deney yaptım, bir şey yanlış mı biliyorum?

{
   x=matrix(1:10,2,5)
}
print(x[2,2])
[1] 4

CEVAP
5 HAZİRAN 2012, Salı


Değişkenler bir işlev bu işlev için yerel çağırılacaktır. Örneğin:

foo <- function() {
    bar <- 1
}
foo()
bar

aşağıdaki hata verir: Error: object 'bar' not found.

Eğer bar global bir değişken yapmak istiyorsanız, yapmanız gereken:

foo <- function() {
    bar <<- 1
}
foo()
bar

Bu durumda bar işlevi dışarıdan erişilebilir.

Ancak, C, C veya diğer birçok dilde farklı olarak, parantez değişkenleri kapsamını belirlemek değil. Aşağıdaki kod parçasında örneğin:

if (x > 10) {
    y <- 0
}
else {
    y <- 1
}

y if-else deyim sonra erişilebilir kalır.

Sizin de dediğiniz gibi, aynı zamanda iç içe ortamlar oluşturabilirsiniz. Onları nasıl kullanılacağını anlamak için: bu iki link de bir göz atabilirsiniz

  1. http://stat.ethz.ch/R-manual/R-devel/library/base/html/environment.html
  2. http://stat.ethz.ch/R-manual/R-devel/library/base/html/get.html

Burada küçük bir örnek var:

test.env <- new.env()

assign('var', 100, envir=test.env)
# or simply
test.env$var <- 100

get('var') # var cannot be found since it is not defined in this environment
get('var', envir=test.env) # now it can be found

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bobinire

    bobinire

    24 EYLÜL 2006
  • celebrateubuntu

    celebrateubu

    23 Mayıs 2011
  • Cole Rolland

    Cole Rolland

    23 Kasım 2008