یک آزمایشگاه آب در اصفهان شوری شش چاه را ثبت میکند و یکی از چاهها آن هفته نمونهبرداری نشد. در R آن ستون اینطور نوشته میشود، و اولین جوابی که میدهد همان جواب بهدردبخور است:
shoori <- c(1.8, 2.4, NA, 3.1, 2.2, 2.9)mean(shoori)جوابNAمیدهدmean(shoori, na.rm = TRUE)جواب2.48میدهد
NA یک مقدار است، پس میانگین ستونی که یک جای خالی دارد NA میشود نه یک عدد. این نقص نیست، زبان است که حاضر نیست از مجموعهای که کاملاً نمیشناسدش میانگین بگیرد، و بزرگترین دلیل تکی برای نوشتن آمار اینجاست بهجای جایی که بیصدا یک عدد پس میداد. na.rm = TRUE مقدارهای غایب را میاندازد و همین را داخل خود فراخوانی میگوید، پس تصمیم نادیده گرفتن یک جای خالی روی همان سطری دیده میشود که گرفته شده، نه در حافظه هیچکس.
و همان NA یک بار دیگر سر و کلهاش پیدا میشود، جایی که کسی انتظارش را ندارد. shoori[shoori > 2.5] جواب NA 3.1 2.9 میدهد، چون مقایسه NA با ۲٫۵ خودش NA است و اندیسگذاری با NA یک NA پس میدهد. برای گرفتن فقط عددها which() لازم است. این آزار نیست، همان قاعده است که تا ته برده شده.
انتساب هم چیز دیگری است که یک روز عجیب به نظر میرسد. <- عملگر انتساب است و هر مثالی که خواهید خواند از همان استفاده میکند، پس همان را یاد بگیرید نه علامت مساوی را که آن هم کار میکند.
چیزی به نام یک عدد تنها وجود ندارد
این ایدهای است که کل زبان رویش ساخته شده و ارزش دارد صاف گفته شود. اسکالر وجود ندارد، پس length(5) برابر ۱ است و خود ۵ یک بردار یکعضوی است، یعنی هر عملی برای یک ستون نوشته میشود و هرگز برای یک عضو.
پس shoori * 2 هر عضو را ضرب میکند و هیچ حلقهای نوشته نمیشود. تبدیل شش قرائت به یک واحد دیگر یک عبارت است، مقایسهشان با یک آستانه شش جواب میدهد، و هیچ ifی در کار نیست. کسی که از پایتون میآید اینجا دو هفته حلقه for مینویسد تا عادتش برگردد، و نسخه حلقهای هم بلندتر است و هم کندتر.
دو جزئیات همراهش میآیند. بردار کوتاهتر تا طول بردار بلندتر تکرار میشود، پس اضافه کردن یک تصحیح دوعضوی به یک ستون ششعضوی، تصحیح را سه بار تکرار میکند، که قدرتمند است و گاهی آن چیزی نیست که کسی منظورش بوده. و shoori[1] اولین عضو است، چون R از یک میشمارد، که برعکس تقریباً هر چیز دیگری روی این سایت است و دستکم یک بار سر همه را میبرد.
دیتافریم همان چیزی است که زبان واقعاً دربارهاش است
دیتافریم فهرستی از ستونهاست که همه یک طول دارند، یعنی یک جدول با شرطش نوشتهشده. df$shoori با نام به یک ستون میرسد، و هر خلاصه و مدل و نموداری در این زبان یکی از اینها میگیرد و یکی دیگر پس میدهد. همین یک شکل است که R را از یک زبان عمومی متفاوت میکند: فعلها با هم ترکیب میشوند چون همهشان یک جدول میگیرند و یک جدول برمیگردانند، پس فیلتر و گروه و خلاصه و نمودار پشت هم زنجیر میشوند بدون اینکه چیزی میان دو گام تبدیل شود. روشهایی که این فعلها تغذیهشان میکنند زیر یادگیری ماشین هستند، و همان جدولها معمولاً از جایی میآیند که زبانش پایگاه داده است.
خط از کجا میگذرد
کارهایی که این زبان برایشان درست است، و جایی که آن تمام میشود
یک بازه با دو سر نامدار، نه یک نمره. جایگذاریها مال یک نویسنده است و وسطش جایی است که آدمهای منطقی اختلاف دارند.
- روشی که امسال منتشر شدهپیادهسازی کارکن معمولاً اول اینجاست، و اغلب فقط اینجا
- گزارش هفتگی با نمودار و متن در یک فایلچهل سطر، و عددِ داخل پاراگراف نمیتواند از کد جدا بیفتد
- تمیز کردن جدولی که جای خالی داردNA یک مقدار درجهیک است نه چیزی که باید دورش زد
- مدلی که باید داخل یک محصول اجرا شوداینجا ممکن است، و داستان استقرارش جای دیگری مسئله کس دیگری است
- اسکریپتی که فایلها را تغییر نام میدهد و سه سرویس را صدا میزندنشانه اینکه زبان اشتباه است، و نشانه بلندی هم هست
هیچکس این جایگذاریها را اندازه نگرفته و نمیتوانست بگیرد. اینها یک استدلالاند، که کار همین ساختار است، و این صفحه فقط درباره سر راست این بازه مطمئن است.
ابزار، و سالی که این حرف درست است
Posit Workbench که هنوز همه RStudio صدایش میکنند ویرایشگر است، و نسخه دسکتاپ رایگانش همانی است که تقریباً همه به کار میبرند. جای اجرا کردن R سر خط فرمان با یک پنجره نمودار جدا را گرفت، و دلیل اینکه اینجا بیشتر از حد معمول یک ویرایشگر اهمیت دارد آن پنلی است که هر شی موجود در حافظه را نشان میدهد.
CRAN بایگانی بستههاست و رایگان. جای دانلود کردن کد از صفحه دانشگاهی یک پژوهشگر را گرفت، و ویژگی متمایزش این است که بستهها موقع ارسال بررسی میشوند و باید کار کنند، که دلیل این است که یک بسته R از سال ۲۰۱۵ معمولاً هنوز نصب میشود. CRAN آینههای زیادی دارد و انتخاب آینه در خود R یک تنظیم است، که برای کسی که از ایران کار میکند یعنی این یکی از معدود اکوسیستمهایی است که راهحلش از قبل داخل زبان هست.
Quarto از سال ۲۰۲۲ چیزی است که گزارش با آن نوشته میشود، و رایگان است. جای چسباندن دستی یک نمودار داخل یک سند را گرفت: کد و متن و خروجی یک فایلاند، پس عددی که داخل پاراگراف است همان عددی است که کد تولیدش کرده و نمیتواند از آن جدا بیفتد.
اشتباه: انتخابش بهعنوان زبان عمومی، یا ردش بهعنوان اسباببازی
هر دو خطا رایجاند و یک خطا هستند. R محیطی آماری است که یک زبان از دلش درآمده، نه زبانی که آمار به آن اضافه شده، و تصمیمهای طراحیاش از همین درمیآیند: اول بردار، داده غایب بهعنوان یک مقدار درجهیک، و بایگانیای که حول روشها ساخته شده نه حول برنامهها.
در ایران این خطا شکل مشخص خودش را دارد و از یک واحد درسی میآید. R اینجا معمولاً در درس آمار یا اقتصادسنجی دیده میشود، بهشکل چند اسکریپت که باید اجرا شوند و خروجیشان داخل پایاننامه برود. کسی که اینطور یادش گرفته باشد اسکریپت را کپی میکند، عددها را عوض میکند و هیچوقت نمیفهمد که آن سطر روی یک ستون کار میکند نه روی یک عدد. بعد اولین باری که دادهاش شکل دیگری دارد، همهاش از کار میافتد و نتیجه میگیرد زبان بدقلق است.
راه بیرون آمدنش از آن هم یک بعدازظهر است: یک ستون واقعی از داده خودتان بردارید، بدون هیچ کتابخانهای، و همان چهار کار بالا را رویش انجام بدهید. بعد از آن هر اسکریپتی خوانا میشود. موضع صادقانه هم این است که این زبان دومی است که برای یک کار انتخاب میشود، و اینکه زبان اول چه باید باشد انتخاب زبان برنامهنویسی است. زبان عمومیای هم که بیشترین همپوشانی را با آن دارد و سمت دیگر بیشتر این معاملهها را میگیرد پایتون است، زیر زبانهای برنامهنویسی.