r - بالانجليزي - ما معنى كلمة last name بالعربية



ما هي الاختلافات بين "=" و "<-" في R؟ (4)

ما هي الاختلافات بين مشغلي المهمة = و <- في R؟

أعلم أن المشغلين مختلفين بعض الشيء ، كما يظهر هذا المثال

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

لكن هل هذا هو الاختلاف الوحيد؟

https://ffff65535.com


المشغلين <- و = تعيين في البيئة التي يتم تقييمها. يمكن استخدام المشغل <- أي مكان ، في حين أن المشغل = مسموح به فقط في المستوى الأعلى (على سبيل المثال ، في التعبير الكامل المكتوب في موجه الأوامر) أو كأحد التعبيرات الفرعية في قائمة التعبيرات.


قد يزيد هذا أيضًا من فهم الفرق بين هذين العاملين:

df <- data.frame(
      a = rnorm(10),
      b <- rnorm(10)
)

بالنسبة للعنصر الأول ، قام R بتعيين القيم والاسم الصحيح ، بينما يبدو اسم العنصر الثاني غريبًا بعض الشيء.

str(df)
# 'data.frame': 10 obs. of  2 variables:
#  $ a             : num  0.6393 1.125 -1.2514 0.0729 -1.3292 ...
#  $ b....rnorm.10.: num  0.2485 0.0391 -1.6532 -0.3366 1.1951 ...

R الإصدار 3.3.2 (2016-10-31) ؛ macOS Sierra 10.12.1



يكون الفرق في مشغلات التعيين أكثر وضوحًا عند استخدامها لتعيين قيمة وسيطة في استدعاء دالة. فمثلا:

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

في هذه الحالة ، يتم الإعلان عن x داخل نطاق الدالة ، لذا فهي غير موجودة في مساحة عمل المستخدم.

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

في هذه الحالة ، يتم تعريف x في مساحة عمل المستخدم ، بحيث يمكنك استخدامه بعد اكتمال استدعاء الدالة.

يوجد تفضيل عام بين مجتمع R لاستخدام <- للتخصيص (بخلاف تواقيع الوظائف) للتوافق مع الإصدارات القديمة جدًا من S-Plus. لاحظ أن المساحات تساعد على توضيح حالات مثل

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

تحتوي معظم IDEs R على اختصارات لوحة المفاتيح لجعل <- أسهل في الكتابة. Ctrl + = في Architect ، Alt + - في RStudio ( Option + - ضمن macOS) ، Shift + - (شرطة سفلية) في emacs + ESS.

إذا كنت تفضل الكتابة = إلى <- ولكنك ترغب في استخدام رمز التعيين الأكثر شيوعًا للشفرة التي تم إصدارها بشكل عام (على CRAN ، على سبيل المثال) ، فيمكنك استخدام إحدى tidy_* في حزمة formatR لاستبدال = تلقائيًا بـ <- .

library(formatR)
tidy_source(text = "x=1:5", arrow = TRUE)
## x <- 1:5

الإجابة على السؤال "لماذا لا يلقي x <- y = 5 خطأ ولكن ليس x <- y <- 5 ؟" هو "إلى السحر الوارد في المحلل اللغوي". يحتوي صيغة R على العديد من الحالات الغامضة التي يجب حلها بطريقة أو بأخرى. يختار المحلل اللغوي حل أجزاء التعبير في أوامر مختلفة بناءً على ما إذا كان = أو <- تم استخدامه.

لفهم ما يحدث ، تحتاج إلى معرفة أن التعيين بصمت يُرجع القيمة التي تم تعيينها. يمكنك رؤية ذلك بوضوح أكبر من خلال الطباعة الصريحة ، على سبيل المثال print(x <- 2 + 3) .

ثانيًا ، يكون الأمر أكثر وضوحًا إذا استخدمنا تدوين البادئة للمهمة. وبالتالي

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

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

يفسر المحلل اللغوي x <- y <- 5 كـ

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

قد نتوقع أن تكون x <- y = 5

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

ولكن في الواقع يتم تفسيرها على أنها

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

هذا بسبب أن = أسبقية أقل من <- ، كما هو موضح في صفحة مساعدة ?Syntax .





r-faq