R یک زبان با نوعدهی پویا است، بنابراین بهطور کلی لازم نیست نوع یک متغیر را مشخص کنید. عملگر ترجیحی برای مقداردهی <- است.
x <- 42
avogadro <- 6.02e23
mystr <- "Hello, World!"
استفاده از = بهجای <- اغلب کار میکند، هرچند نه همیشه، و بهعنوان سبکی نامناسب توصیه نمیشود.
اگر در RStudio کار میکنید، میتوانید آن را با میانبر صفحهکلید Alt-minus وارد کنید.
عملگرها بیشتر متعارفاند، اما به %/% و %% توجه کنید:
2 + 3 # 5
2 - 3 # -1
2 * 3 # 6
2 / 3 # 0.6666667
8 %/% 3 # 2 (integer division)
8 %% 3 # 2 (remainder)
2 ^ 3 # 8 (exponential)
در R، # یک توضیح یکخطی را شروع میکند.
برای توضیحات چندخطی، نحوهی نگارش جداگانهای وجود ندارد.
برای تعریف یک تابع:
squareit <- function(x) {
x * x
}
توابع میتوانند صفر یا چند آرگومان داشته باشند که با کاما از هم جدا میشوند.
پرانتزهای () همراه با function() لازماند، حتی اگر پارامتری وجود نداشته باشد.
میتوان برای آرگومانهای تابع مقادیر پیشفرض تعیین کرد، اما این مقادیر باید بعد از هر آرگومانی که پیشفرض ندارد بیایند و برای مقداردهی مقدار پیشفرض، از = استفاده شود نه از <-.
بهعنوان مثالی نسبتاً بیفایده:
squareit <- function(x = 42) {
x * x
}
squareit()
#> [1] 1764
آکولادهای { } برای بدنهی توابع یکخطی بهطور دقیق لازم نیستند، اما گنجاندنشان سبک خوبی به شمار میآید.
R بهطور خودکار مقدار نهایی یک تابع را برمیگرداند، همانطور که در مثالهای بالا آمده است.
میتوان از return() در هر جای بدنهی تابع استفاده کرد تا مقدار بازگشتی صریح شود.
فراخوانی یک تابع مانند بسیاری از زبانهای دیگر است:
squareit(3)
#> [1] 9
در این تمرین قرار است کدی بنویسید که به شما کمک کند از کتاب آشپزی مورد علاقهتان یک لازانیای عالی بپزید.
چهار کار دارید که همگی به زمان صرفشده برای پختن لازانیا مربوط میشوند.
«تابع» expected_minutes_in_oven() را تعریف کنید که هیچ «پارامتر» ورودی نمیگیرد و برمیگرداند که لازانیا چند دقیقه باید در فر بماند. طبق کتاب آشپزی، زمان مورد انتظار در فر بر حسب دقیقه برابر با 60 است.
> expected_minutes_in_oven()
[1] 60
تابع remaining_time_in_minutes را تعریف کنید که به عنوان پارامتر، تعداد دقیقههای واقعیای را که لازانیا در فر بوده است میگیرد و بر اساس زمان مورد انتظار در فر بر حسب دقیقه از کار قبلی، برمیگرداند که لازانیا چند دقیقهی دیگر باید در فر بماند.
> remaining_time_in_minutes(50)
[1] 10
تابع prep_time_in_minutes() را تعریف کنید که به عنوان پارامتر، تعداد لایههایی را که به لازانیا اضافه کردهاید میگیرد و برمیگرداند که چند دقیقه صرف آمادهسازی لازانیا کردهاید، با این فرض که آمادهسازی هر لایه 2 دقیقه طول میکشد.
> prep_time_in_minutes(2)
[1] 4
تابع elapsed_time_in_minutes را تعریف کنید که دو «آرگومان» میگیرد: آرگومان اول تعداد لایههایی است که به لازانیا اضافه کردهاید، و پارامتر دوم تعداد دقیقههایی است که لازانیا در فر بوده است. تابع باید برگرداند که در مجموع چند دقیقه برای پختن لازانیا وقت گذاشتهاید، که برابر است با مجموع زمان آمادهسازی بر حسب دقیقه و زمان بر حسب دقیقهای که لازانیا تا این لحظه در فر گذرانده است.
> elapsed_time_in_minutes(3, 20)
[1] 26