קונור אריס: ובכל זאת אני חושב כמה וידאו מרגש המיוצר על ידי חברת ייעוץ מקצועי המשתמש בR הרבה בעבודה שלה. קריין: מה עומד מאחורי הנתונים הסטטיסטיים, הניתוח, וחזותי מדעני נתונים הבהירים של היום ש ומנהיגים עסקיים לסמוך על לקבל החלטות רבות עוצמה? אתה לא יכול תמיד לראות את זה. אבל זה שם. זה נקרא R, קוד פתוח r-- שפת תכנות סטטיסטית שמומחי נתונים העולם על שימוש לכל דבר ממיפוי רחב חברתי ומגמות שיווק באינטרנט לפיתוח הכלכלי ואקלים מודלים המסייעים לנהוג הכלכלות שלנו וקהילות. אבל מה בדיוק R וכאשר R התחיל? ובכן במקור, התחיל R כאן עם שני פרופסורים שרצו סטטיסטי טוב יותר פלטפורמה לתלמידיהם. אז הם יצרו את אחד מודל לאחר השפה הסטטיסטית ס הם, יחד עם רבים אחרים, המשיך לעבוד על ובאמצעות R, יצירת כלים לR ומציאת יישומים חדשים למחקר בכל יום. הודות לכך הוא מאמץ קהילתי ברחבי העולם, R המשיך לגדול עם אלפים ספריות נוצרו על ידי משתמשים שנבנו כדי לשפר את הפונקציונליות R ו אימות איכות מקורות קהל ותמיכה ממוכרת ביותר מנהיגים בכל תחום תעשייה ש משתמש ר 'וזה נהדר, כי R הוא הכי טוב במה שהיא עושה. ניצני מומחים במהירות וב בקלות לפרש, אינטראקציה עם, ולדמיין הנתונים מראים במהירות קהילה הולכת וגדלה של משתמשים ברחבי העולם R ותראה איך קוד פתוח R ממשיך לעצב העתיד של סטטיסטי ניתוח ומדע הנתונים. קונור אריס: אישור, גדול. אז המצגת שלי יהיה קצת יותר מפוכח. זה לא יהיה כרוך בכל כך הרבה מוסיקה רקע מרגשת. אבל כפי שראית בווידאו, R הוא סוג של שפת תכנית למטרות כללית. אבל זה נוצר בעיקר לעבודה סטטיסטית. אז זה מיועד לסטטיסטיקה, לניתוח נתונים, לכריית נתונים. ואז אתה יכול לראות את זה בהרבה אפשרויות עיצוב שמקבלי של R עָשׂוּי. זה מיועד במידה רבה, אנשים שאינם מומחים בתכנות, ש רק להרים תכנות בצד כדי שהם יוכלו לעשות את העבודה שלהם במדעי חברה או בסטטיסטיקה או מה שלא יהיה. יש לו הרבה מאוד הבדלים חשובים מג אבל התחביר ופרדיגמות כי היא משתמשת הם רחבה אותו הדבר. ואתה צריך להרגיש יפה הרבה בבית מייד את הבת. זה שפה הכרחית. אל תדאגו יותר מדי על זה אם אתה לא מכיר את המונח. אבל יש הבחנה בין ציווי, הצהרתי, ופונקציונלי. הכרחי רק אומר לך לעשות הצהרות שהם בעצם פקודות. ואז המתורגמן או מחשב מלווה אותם האחד אחד. זה חלש הקליד, יש לא הצהרות סוג בר ' ולאחר מכן הקווים בין סוגים שונים הם קצת יותר משוחררים מאשר הם נמצאים בC, למשל. וכמו שאמרתי יש מתקנים נרחבים מאוד לגרפים, לסטטיסטי ניתוח, לכריית נתונים. אלה שני מובנים ב שפה ו, כווידאו אמר, אלפי ספריות צד שלישיים ש אתה יכול להוריד ולהשתמש ללא תשלום עם תנאי רישיון רופפים מאוד. אז באופן כללי, אני ממליץ שאתה מסתכל על שני הספרים הללו אם אתה הולך לעבוד על ר 'אחת שלהם הוא מתחיל של R הרשמי להנחות. זה מתוחזק על ידי מפתחי ליבה של ר ' אתה יכול להוריד אותו שוב, ללא לחייב באופן חוקי ובקישור שיש. כל שקופיות אלה הולכים עד באינטרנט, באתר האינטרנט של CS50 אחרי זה נעשה. כך שאין צורך להעתיק דברים למטה בטירוף. השני הוא ספר לימוד על ידי Cosma Shalizi, מי הוא פרופסור לסטטיסטיקה ב קרנגי מלון, הנקרא נתונים מתקדמים ניתוח מ נקודה יסודי של תצוגה. זה לא בעיקר ספר R. זה ספר סטטיסטיקה ו זה ספר ניתוח נתונים. אבל זה מאוד נגיש לאנשים ש יש קורטוב של ידע סטטיסטיקה. אני אף פעם לא לקחתי קורס פורמלי. אני רק יודע שפיסות מנושאים שונים של בעלות הברית כי אני כבר לקחתי קורסים ב. ואני היה מסוגל להבין זה היטב. מקבלים את כל הנתונים בר 'הם עשו בR ויש להם גם רישומי קוד מתחת לכל דמות שאומרות לך איך לגרום לך כל דמות עם קוד R. וזה מאוד שימושי אם אתה מנסה לחקות כמה דמות שאתה רואה בספר. ולהוריד שוב בחינם stat.cmu.edu/cshalizi/ מצטער, כי יש לקצץ cshalizi טילדה. אני אוודא לתקן ש כאשר השקופיות הרשמיות לעלות. / ADAfaEPoV שהוא רק ראשי התיבות של כותרת הספר. R caveats-- אז כללי יש לו הרבה יכולות. אני הולך רק כדי להיות מסוגל לכסות פני השטח של הרבה דברים. גם החלק הראשון של הסמינר הולך להיות משהו של מזבלה נתונים. אני די מצטער על כך. בעיקרון, אני הולך אכיר לך הרבה דברים מייד את הבת, הולך מהר ככל האפשר. ואז אנחנו מגיעים ל החלק המהנה, שהוא ההדגמה שבו אני יכול להראות לך הכל שדברנו על על המסך. ואתה יכול לשחק בעצמך. אז יש הולך להיות הרבה נזרקו עד דברים טכניים על כאן. אל תדאגו העתקה את כל זה. משום, שאתה יכול לקבל את כל דברים באתר CS50 מאוחר יותר. ו- B, זה לא באמת כל כך חשוב לשנן את זה מהשקופיות. זה יותר חשוב כי אתה מקבל כמה מתקן אינטואיטיבי עם זה ושמגיע מרק משתעשע. אז למה להשתמש R? בעיקרון, אם יש לך פרויקט ש כרוך כריית ערכות נתונים גדולות, נתונים הדמיה, צריך להשתמש ר 'אם אתה עושה ניתוחים סטטיסטיים מורכבים, שיהיה קשה ב- Excel, לדוגמא, זה היה גם good-- גם אם אתה עושה סטטיסטי ניתוח זה אוטומטי. בואו נגיד שאתה תחזוקה של אתר אינטרנט. ואתה רוצה לקרוא את יומן השרת כל יום ולאסוף כמה רשימה, כמו המדינות המובילות ש המשתמשים שלך מגיעים, כמה נתונים סטטיסטיים סיכום על כמה זמן הם מבלים באתר או בכל מה ששלך. ואתה רוצה להפעיל את זה כל יום. עכשיו, אם אתה עושה את זה ב- Excel, היית צריך ללכת ליומן השרת שלך, לייבא את זה לתוך גיליון אלקטרוני Excel נתונים, להפעיל את כל הניתוח באופן ידני. עם R, אתה יכול פשוט לכתוב תסריט אחד. לתזמן אותו לרוץ כל יום ממערכת ההפעלה שלך. ואז כל לילה בשעה 2:00 בבוקר, או בכל פעם שאתה לתזמן אותו לרוץ, זה ייראה דרכך תעבורת אינטרנט באותו יום. ולאחר מכן על ידי הבא היום, תוכל יש לי דו"ח מבריק, חדש או מה עם כל מידע שביקשת. אז בעצם R הוא עבור סיסקו תכנות לעומת ניתוח סיסקו. ראשוני נעשה. בואו להיכנס לדברים האמיתיים. אז יש שלוש אמיתיים סוגים בשפה. יש סוג מספרי. יש סוג של הבדל בין מספרים שלמים ונקודות צפות, אבל לא ממש. יש אופי הקלד, אשר היא מחרוזות. ויש הגיוני הקלד, שהוא Booleans. ואתה יכול להמיר בין סוגים שימוש בפונקציות אלה כמספריים, כדמות, כהגיוני. אם אתה קורא, למשל, כמספרי על חוט, הוא ינסה לקרוא מחרוזת ש כמספר, באותה הדרך שa2i וscanf לעשות, ואם ג אתה קורא כמספרי על אמת או שקר זה יהיה להמיר עד 1 או 0. אם אתה קורא כדמות על כל דבר שהוא ימצא להמיר את זה ב ייצוג מחרוזת. ואז יש וקטורים ומטריצות. אז וקטורים הם בעצם 1 מערכים ממדיים. הם מה שאנו מכנים במערכים ג מטריצות, 2 מערכים ממדיים. ואז גבוה יותר ממדיים מערכים שאתה יכול יש 3, 4, 5 ממדים או מה ש של ערכים מספריים, מחרוזות, ערכים של הגיוניים. יש לך גם רשימות ש סוג של מערך אסוציאטיבי. אני נכנסתי לזה קצת. אז דבר אחד חשוב כי טיולים עד אנשים בR הוא שאין , סוגים אטומיים טהורים אמיתיים. אין הבחנה ממשית בין מספר, כמו ערך מספרי, ורשימה של ערכים מספריים. ערכים מספריים הם למעשה כמו הווקטורים באורך 1. ואת זה יש מספר השלכות חשובות. אחד, זה אומר שאתה יכול לעשות דברים בקלות רב הכרוכים ב כמו הוספת מספר לוקטור. R יהיה בעצם דמות מה אתה מתכוון בזה. ואני אגיע לזה בשנייה. זה גם אומר שאין שום דרך לסוג checker-- למידה שמשהו כזה קיים בr-- לספר כשאתה כבר עברת בערך היחיד כאשר היא מצפה להיפך מערך או סגן. וזה יכול לגרום לכמה מוזר צרות שאני נתקלתי בכאשר אני משתמש R בעבודת הקיץ שלי. ואין מערכים מעורב-סוג. אז אתה לא יכול להיות מערך היה האלמנטים ראשון, אני לא יודע, המחרוזת "ג'ון" ו אלמנט שני הוא מספר 42. אם אתה מנסה לעשות את זה, אז אתה תקבל כמעט כל מה יומר למחרוזת. אז יש לנו מחרוזת ג'ון, מחרוזת 42. תחבירי כל כך יוצא דופן features-- ביותר של R תחביר דומה מאוד לג יש כמה הבדלים חשובים. הקלדה היא חלשה מאוד. ולכן אין הצהרות משתנים. הקצאה משתמשת המוזרה מפעיל שגיאה פחות ממקף. תגובות הן עם סימן החשיש. אני מניח שעכשיו ימים אנחנו קוראים לזה hashtag אם כי זה לא ממש accurate-- לא הקו הנטוי הכפול. שאריות מודולרי הן עם סימני %%. חלוקת מספר שלם היא עם% /% שהוא מאוד קשה לקריאה כאשר הוא מוקרן על המסך. אתה יכול לקבל טווחים של מספרים שלמים עם המעי הגס. אז 2,5 ייתן לך וקטור של כל המספרים 2 עד 5. מערכים צמודים אחד, שברגים הרבה אנשים עד אם הם מיותר שפות תכנות טיפוסיות, כמו C, שבו רוב הדברים אפס צמודים. שוב, זה שבו המורשת של R כשפה ללא כמו מתכנתים מקצועיים מגיעים ב. אם אתה סוציולוג או כלכלן או משהו ואתה מנסה להשתמש R בעצם כתוספת לחשוב יותר עבודה מקצועית, אתה הולך למצוא אחד-אינדקס קצת יותר טבעי. מכיוון שאתה מתחיל לספור ב 1 בחיי היומיום, לא 0. ל- לולאות, זה דומה ל foreach לבנות ב- PHP, שתקבל ל ללמוד in-- די מהר. שהוא ערך בוקטור ו אז אתה יכול לעשות דברים עם ערך. קהל: זה לבוא בהרצאה. קונור אריס: אה, זה לבוא הרצאה, מעולה. קהל: המשימה, הוא אותו אמור להצביע מימין לשמאל? קונור אריס: מימין לשמאל, כן. אתה יכול לחשוב על זה כעל הערך הזכות דחפה לתוך המשתנה בצד שמאל. קהל: אישור. קונור אריס: ולבסוף תחביר פונקציה הוא קצת מוזר. יש לך את שם הפונקציה foo, הוקצה לפונקציה זו מילת המפתח, ואחרי על ידי כל הטיעונים ולאחר מכן גוף של הפונקציה לאחר ש. שוב הדברים האלה רשאי נראה קצת מוזר. הם יהפכו לטבע שני לאחר אתה עובד עם השפה קצת. אז וקטורים, הדרך לך לבנות וקטור הוא הסוג C, אשר הוא מילת מפתח, אז כל המספרים שאתה רוצה או מחרוזות או מה שלא יהיה. טענות גם להיות וקטורים. אבל מערך התוצאה מקבל בברוטליות. אז אתה לא יכול לקבל מערכים בי כמה אלמנטים מספרים בודדים וכמה אלמנטים הם מערכים עצמם. אז אם אתה מנסה לבנות המערך היה האלמנט הראשון הוא 4 והמרכיב השני הוא 3.5 המערך אתה רק לקבל מערך שלושה אלמנטים, 4,3,5. הם לא יכולים להיות מעורב סוג. אם אתה מנסה לקרוא או לכתוב מחוץ לגבולות וקטור תקבל הערך הזה שנקרא NA אשר מייצג ערך חסר. וזה מיועד ל כמו סטטיסטיקאים ש עובדים עם ערכות נתונים שלמות. אם תחיל פונקציה שאמורה לקחת רק מספר אחד למערך אז מה שתקבל הוא, פונקציה תמפה על המערך. אז אם הפונקציה שלך נניח לוקח מספר ומחזיר אותו מרובע. החלת שלמערך 2,3,5 מה שתקבל הוא את המערך 4,9,25. וזה מאוד שימושי כי זה אומר שאתה לא צריך לכתוב ללולאות ל עושה דברים מאוד פשוטים כמו החלת פונקציה לכל החברים של קבוצת נתונים. שאם אתה עובד עם גדול ערכות נתונים, אתה צריך לעשות הרבה. פונקציות בינארי הן כניסה מיושמת על ידי כניסה. אני נכנסתי לזה. אתה יכול לגשת אליהם עם מערכים או וקטורים עם סוגריים מרובעים. סוגריים אז את שם וקטור מרובע 1 אתן לך את האלמנט הראשון. סוגריים מרובעים שם וקטור 2 אתן לך את המרכיב השני. אתה יכול לעבור על וקטור מדדים ואתה תמצאו לחזור החוצה בעצם גורם תת. אז אתה יכול לעשות C שם סוגריים וקטור, 2,4 ותקבל את וקטור המכיל השני והרביעי אלמנטים של המערך. ואם אתה רוצה רק נתון סיכום מהיר של וקטור כמו רבעוני טווח, חציון, מקסימום, מה, אתה יכול פשוט להקליד סיכום שם וקטור ולקבל את זה. זה לא ממש שימושי ב תכנות אבל אם אתה משחק סביב ערכות נתונים, זה שימושי. Matrices-- בעצם מערכי ממדים גבוהים יותר. יש להם תחביר סימון מיוחד זה. מטריקס עם מערך שמקבל מילא in-- מצטערת, מטריצה ​​עם נתונים, מספר השורות, מספר העמודות. כאשר יש לך כמה נתונים, זה ממלא ב המערך בעצם הולך מלמעלה למטה ראשון. אז משמאל לימין. אז, כמו ש. וR בנה ב כפל מטריצה, פירוק ספקטרלי, diagonalization, הרבה דברים. אם אתה רוצה ממדי גבוה יותר מערכים, כך 3, 4, 5, או מה שממדים אתה יכול לעשות את זה. התחביר הוא עמום מערך שווה ג, אז הרשימה של הממדים. אז אם אתה רוצה מערך ממדי 4 עם ממדים 4, 7, 8, 9, המערך, עמום שווה ג (4,7,8,9). אתה ניגש לערכים יחידים עם סוגריים פסיק כניסה ראשון כניסה שנייה. אתה יכול לקבל כל פרוסות של שורות או עמודות. עם תחביר שלם זה זה רק שורה או עמודת פסיק מספר פסיק מִספָּר. אז רשימות הן סוג של המערך קשור. יש להם התחביר שלהם כאן. לעשות שוב לא בטירוף להעתיק את כל זה. זה רק כדי שאנשים עובר את השקופיות מאוחר יותר יש את כל זה בהתייחסות נחמדה. וזה יהפוך ברגע מאוד טבעי אני באמת ללכת דרך ההדגמות. אז מפרט מערכים בעצם קשורים. אתה יכול לגשת לערכים ב שם רשימה, סימן דולר, מפתח. אז אם הרשימה שלך נקראת foo, אז אתה יכול לגשת אליו ככה. אתה יכול לקבל זוג מפתחות-ערך כל על ידי עובר במדד הסוגר המרובע. אם אתה קורא מאינו קיים מפתח, תקבל null. זה לא שגיאה. עניין הוא, R יעשה כ הרבה עם null כפי שהוא יכול. וזה יכול להיות שאם אתה לא מצפה לקבל את null חלק קריאת רשימה, תקבל כמה שגיאות בלתי צפויות בהמשך השורה. זה קרה לי שלי עבודה בקיץ כאשר הייתי משתמש R שבו שיניתי את אופן מסוים רשימה הוגדרה במקום אחד אבל לא שינה בשלב מאוחר יותר קוד שקורא ערכים מזה. ואז מה שקרה הוא שהייתי קריאת ערכים מתוך רשימה זו null, עובר אותם לפונקציות, ולהיות מאוד מבולבל כשהגעתי כל מיני אינסופים אקראיים צצים בפונקציה זו. כי אם אתה מחיל מרבי מסוים או פונקציות מינימום ל null, תקבל את ערכים אינסופיים. מסגרות נתונים, הם סדרה של רשימה. כל ערך הוא וקטור באותו האורך. והם משמשים להצגת, בעצם, טבלאות נתונים. יש תחביר אתחול זה. זה יהיה כל, שוב, יהיה הרבה ברור כשאתה מגיע להדגמה. והדבר נחמד על מסגרות הנתונים היא שאתה יכול לתת שמות לכל הטורים ושמות לכל השורות. וכך זה עושה את הגישה אותם קצת יותר ידידותיים. גם ככה רוב הפונקציות ש לקרוא בנתונים מגיליונות אלקטרוניים Excel או מקבצי טקסט, למשל, יקרא בנתונים שלהם. הם הכניסו אותו לתוך איזה מסגרת נתונים. אז functions-- הפונקציות התחביר הוא קצת מוזר. שוב זה את השם של הפונקציה, להקצות, פונקצית מילת מפתח זו ולאחר מכן הרשימה של טיעונים. אז יש כמה דברים נחמדים על איך פונקציות לעבוד כאן. לאחד, למעשה אתה יכול להקצות ערכי ברירת מחדל לטענות מסוימות. אז אתה יכול לומר R1 equals-- אתה יכול להגיד foo היא פונקציה שבי R1 שווה משהו כברירת מחדל, אם המשתמש מציין אין טענות. אחרת, זה כל מה שהוא מכניס. וזה מאוד נוח כי הרבה פונקציות שלנו יש לעתים קרובות עשרות או מאות טיעונים. לדוגמא אלה לזוממים גרפים או מגרשי פיזור זוממים יש טענות ששולטות הכל מהסרט והציר תוויות לצבע של קווי רגרסיה. ולכן אם אתה לא רוצה כדי לגרום לאנשים לציין כל אחד מאלה מאות טיעונים שליטה בכל היבט של עלילה או רגרסיה או מה, זה נחמד שיש ערכי ברירת מחדל אלה. ואז אתה בעצם יכול לכתוב כמו שאתה ראית לכאן. או למצוא דוגמא טובה יותר. כאשר אתה קורא פונקציות שאתה באמת יכול קורא להם באמצעות שמות הטיעון. אז הנה דוגמא ל בנאי המטריצה. זה לוקח שלוש טענות. בדרך כלל יש לך נתונים, אשר הוא וקטור. יש לך שורת N, ש הוא מספר השורות. יש לך N cols-- מספר העמודות. העניין הוא אם אתה מקליד שורת N שווה כל מה ש וcol N שווה כל עת אתה קורא בפונקציה זו, למעשה אתה יכול להפוך אותם. אז אתה יכול לשים את col N ראשון ושורת N שני וזה יעשה את כל הבדל. אז זה תכונה קטנה ונחמדה. עשה יבוא ויצוא. ניתן לעשות זאת, בעצם. ישנם גם מתקנים לכתוב את R השרירותי מתנגד לקובץ בינארי ולאחר מכן לקרוא אותם בחזרה במועד מאוחר יותר. וזה נוח אם אתה עושה R הפעלה אינטראקטיבי גדול ואתה צריך לשמור דברים מהר מאוד. כברירת מחדל R יש ספריית עבודה כי קבצים ייכתבו אל ולקרוא בחזרה מ. ניתן לראות כי ב getwg, לשנות אותו עם setdw. שום דבר לא מעניין במיוחד כאן אז עכשיו את הסטטיסטיקה בפועל stuff-- רגרסיה multilinear. אז התחביר הרגיל זה קצת מסובך. המודל הוא אובייקט גדול בעצם. הוא מקבל שהוקצה לLM, אשר היא קריאה לפונקציה. האלמנט הראשון, y x1 טילדה בתוספת מה ש. התחביר שלי כאן הוא קצת מבלבל. אני מצטער מאוד, זה היא הדרך סטנדרטית שספרי מדע המחשב לעשות את זה. אבל זה קצת מוזר. אז בעצם, זה LM סוגריים פריט, ראשון הוא variable-- מצטערים, תלוי x1 טילדה משתנה בתוספת x2 בתוספת עם זאת רבים עצמאיים משתנים שיש לך. ואז אלה יכולים להיות או וקטורים, כל באותו האורך. או שהם יכולים להיות טור כותרות במסגרת הנתונים כי אתה פשוט לציין ב מסגרת נתוני טיעון שנייה. ניתן גם לציין נוסחה מורכבת יותר ולכן אין לך באופן ליניארי לסגת משתנה אחד תלוי, או וקטור אחד על וקטור קיים מראש. אתה יכול לעשות, למשל, y רכיב וקטור בריבוע בתוספת 1 ולסגת כי נגד יומן של כמה וקטור אחר. אתה יכול להדפיס סיכומים מודל עם פקודה זו נקראת summary-- רק סיכום פארנס מודל. שוב משהו אחר שאני צריך להבהיר. משהו אחר שיקבלו מתוקן כאשר השקופיות לעלות באינטרנט. אם אתה רק רוצה לחשב מתאם פשוט אתה יכול להשתמש במתאם וקטור וקטור 1 2 ליבת פונקציה. שיטה היא כברירת מחדל מתאמי פירסון. אלה הם סטנדרטיים אלה שאתה יכול לעשות. יש גם חנית ו מתאמי Kendell שכמה מגוון מתאם כדי דרגה. ובכן הם לא לחשב מוצר רגעים שבין הווקטורים עצמם, אבל בדרגת ההזמנות של הווקטור. אני אסביר כי מאוחר יותר. קהל: שאלה מהירה CONNER אריס: בטח. קהל: אז כשאתה אתה חישוב למתאמים הפשוטים לעשות אתה מניח שיש סטטיסטי משמעות למתאם? CONNER אריס: אתה לא צריך. LM הוא בעצם רק מכונה. זה ייקח בשני דברים וזה יהיה לירוק מקדמי הקו בכושר הטוב ביותר. כמו כן מדווח סטנדרטי שגיאות במקדמים אלה. והוא יגיד לך, כמו הוא ליירט משמעותי מבחינה סטטיסטית או הבדל בין 0. האם שיפוע הטוב ביותר קו הכושר סטטיסטי שונה מאפס, וכולי. אז הוא מניח שום דבר, אני חושב ש היא התשובה הטובה ביותר לשאלתך. אוקיי. Plotting-- כך הסיבה העיקרית שאתה צריך להשתמש R, כמו רגרסיה multilinear. בעיקרון כל שפה יש כמה מתקן של. והתחביר בכנות של R ל רגרסיה היא מסתורית קצת. אבל מזימות היא המקום שבו באמת זורחת. פונקצית סוס העבודה היא עלילה וזה לוקח שני וקטורים, x ו- y. ולאחר מכן האליפסות מייצגת מאוד מספר גדול של טיעונים אופציונליים ש לשלוט בכל דבר מכותרות לצבעים של קווים שונים או נקודות שונות, לסוג של עלילה. אתה יכול להיות פיזור חלקות או מגרשי קו. 2 וקטורים [לא ברור] באותו האורך. אתה יכול להקדים את זה עם חבר מסגרת הנתונים בתסריט שלך. וזה יאפשר לך פשוט להשתמש בעמודה כותרות במקום וקטורים נפרדים. אתה יכול להוסיף קווים בכושר הטובים ביותר ומקומיים עקומות רגרסיה לגרף שלך. פקודות אלה רשומות כאן, ab קו וקווים, כברירת מחדל אלה מקבלים נכתב בחלונות קופצים משום שהיא מניחה ש אתה משתמש R אינטראקטיבי. אם אתה לא יכול לכתוב שני קבצים ש בבאמת כל פורמט שאתה רוצה. מצטער, יש לי טעות דפוס רק עכשיו הבנתי. אם אתה רוצה לפתוח עוד מכשיר גרפי אתה יכול להשתמש בפונקציה זו נקראת PNG או JPEG או הרבה פורמטים של תמונות אחרות. ואתה יכול לכתוב גרפים ל מה שם קובץ שאתה מציין. כדי לבטל שיש לך use-- אני לא כותב את זה בslide-- אבל יש פונקציה שנקראת dev נקודת הנחה שלא לוקחת את טענות. אז יש מתקנים למזימות 3D ולגובה זומם אם אתה רוצה לעשות גרפים של שני משתנים בלתי תלויים. אני לא אכנס לאלה עכשיו. יש גם כמה מתקנים לאנימציה אלה הם בדרך כלל מתוחזק על ידי צדדים שלישיים. עשיתי אנימציות עם גרפים R, אבל לא השתמשתי צד השלישי אלה ספריות. אז אני לא ממש יכול להעיד לכמה הם טובים. מה שאני ממליץ אם אתה רוצה לעשות אנימציות באמצעות R הוא אתה יכול לכתוב את כל המסגרות לאנימציות ואז אתה יכול להשתמש program-- הצד השלישי טיפוסיים אלה נקראים FFmpeg או ImageMagick-- לתפור כל מסגרותיך לאנימציה אחת. אז בפעם להדגמה. אז אם אתה משתמש בכל יוניקס כמו מערכת אשר הוא BSD לינוקס, אבל מי שמשתמש BSD. X OS לפתוח חלון מסוף ו Type R בשורת הפקודה. אם יש לך אולפן R או כמו, שגם עובד. למשתמשי Windows אתה צריך להיות תוכל למצוא R בתפריט התחל שלך. צריך להיקרא זה משהו כמו x64 R 3 נקודות מה. פתח ששם למעלה. אז עכשיו תן לי רק לפתוח חלון מסוף. בסדר, החיפוש. קהל: פיקוד-חלל CONNER אריס: פיקוד-חלל, תודה. אני בדרך לא משתמש במחשבי מקינטוש. מסוף, להראות חלון חדש. חלון חדש הוא הגדרות בסיסי, ר 'אז אתה צריך לקבל הודעת ברכה, משהו כזה. אז אני משתמש R אינטראקטיבי. גם אתה יכול לכתוב תסריטי R כמובן. בעיקרון תסריטים לרוץ באותו אופן כמו המדויק אם אתה יושב מול המחשב הקלדה בכל שורה אחת בכל פעם. אז בואו נתחיל בכך שוקטור. C חץ 1, ​​2. 1, 2, 4. אוקיי בטח. אני יכול לעשות את גודל הגופן גדול יותר. קהל: הפיקוד-פלוס CONNER אריס: הפיקוד-פלוס. הפקודה פלוס. בסדר, איך זה? טוֹב? אוקיי. אז בואו נתחיל ב הכרזת רשימת וקטור. האם, חץ, C 1,2,4. אנחנו יכולים לראות. אל תדאגו את התושבת שם. הסוגריים מציין כך שאם אתה מדפיס מערכים ארוכים מאוד, אנחנו יכולים בו אתה נמצא. דוגמא אחת תהיה אם אני רק רוצה מגוון 2-200. אם אני מודפס מאוד מערך ארוך, סוגריים רק כך אני יכול לשמור אחר שמדד אנחנו באם אני מחפש באמצעות זה מבחינה ויזואלית. אז בכל מקרה, יש לנו. אז אמרתי לפני המערכים כי אינטראקציה יפה מאוד עם, למשל, פעולות יונארית כמו זה. אז מה אתה חושב שאני מקבל אם אני מקליד בתוספת 1? כֵּן. נכון, עכשיו אני אעשה מערך שונה זה. נניח ב ג 20,40, 80. אז מה אתה חושב פקודה זו תעשה? הוסף את האלמנטים. ואז בעצם זה מה שהיא עושה. אז זה די נוח. אז מה דעתך עליי לעשות את זה. ג הוא, נניח, 6 פעמים 1 עד 10. אז מה לעשות אני רוצה לראות הכיל, מה אתה חושב? אז כל כפולות של שש. עכשיו, מה אתה חושב יקרה אם אני עושה את זה? אני אעשה את זה קצת יותר ברור, ג, ג. אז מה קורה, אתה חושב, אם אני עושה את זה? תוספת ג. [לא ברור] קהל: או שגיאה או זה רק מוסיף שלושה האלמנטים הראשונים. CONNER אריס: לא די. זה מה שיש לנו. מה שקורה הוא קצר יותר מערך,, קיבל רכב על אופניו. אז יש לנו 124, 124, 124. כֵּן. ובעצם, אתה יכול להציג התנהגות זו לפני, בתוספת 1, כסדרה של התנהגות, שבו זה המערך הקצר ביותר הוא רק המספר 1, שהוא מערך אלמנט אחד. אני רק אומר להיות וקטור כל הזמן במקום מערך, כי זה מה שr תיעוד עושה בדרך כלל. זה הרגל מושרש ג. אישור, ואז עכשיו יש לנו מערך זה. אז יש לנו המערך, ג זו. אנחנו יכולים לקבל סיכום נתונים סטטיסטיים על ג, סיכום ג. וזה נחמד. אז עכשיו בואו לעשות כמה דברים מטריצה. נניח מ 'היא מטריצה. בואו נעשה את זה שלושה על ידי שלוש אחד. אז nrows שווה 3, וncols שווה 3. ולנתונים בואו do-- אז מה אתה חושב שזה הולך לעשות? נכון, זה הבא. זה nrow וncolumn. אז מה שעשיתי הוא לי הכריז שלושה על ידי שלוש מטריצה ואני כבר עברתי במערך של תשעה אלמנט. אז הלוגריתם של כל אלמנטים אחד עד תשע. וכל הערכים אלה למלא את מצטער array--? קהל: אלה הם בסיס 10 יומנים? CONNER אריס: לא, יומן הוא לוגריתמים טבעיים, דואר כך בסיס. כן, בסיס אם אתה רוצה 10 יומן, אני חושב שיהיה לך כדי להיכנס מה, מחולק ביומן 10. וכך נתונים של [לא ברור] פשוט ממלא את המערך, כך מלמעלה למטה, אז משמאל לימין. ואם אתה רוצה לעשות קצת אחר מערך, נניח n הוא מטריצה. בואו לעשות, אני לא יודע, 2-13. או שאני אעשה משהו מעניין יותר. אני אעשה 2 עד 4. nrow שווה, נניח, 3. ncol שווה 4. n. אז יש לנו את זה. ועכשיו אם אנחנו רוצים להכפיל את אלה, היינו עושה פעמים אחוזים n אחוזים, כי זה n. ויש לנו מוצרי מטריצה. על ידי שהם בדרך, ראית איך כשהכרזתי n, 2 עד 4 וקטור יש רכב על אופניו עד זה מילא את כל n? אם אתה רוצה לקחת פירוק ערך עצמי, זה משהו שאנחנו יכולים לעשות בקלות. אנחנו יכולים לעשות את n אייגן. ואז זה הראשון שלנו מפגש עם רשימה. אז n אייגן הוא רשימה עם שני מפתחות. ערכים, שהוא מערך זה כאן. ווקטורים, שהוא מערך זה כאן. אז אם אתה רוצה לחלץ, למשל, עמודה שלישית ממטריצת הווקטורים העצמית, משום ש הווקטורים העצמיים הם וקטורי עמודה. אז אנחנו יכולים לעשות סימן דולר n אייגן vec וקטורים, פסיק 3, של [לא ברור]. Vec. האם זה, כמו שהיית מצפה. ואז אומר n פעמים פעמים אחוזים vec. אז התוצאה כאן בהחלט נראית כמו אם לקחנו את הערך העצמי השלישי כאן, אשר תואם עם eigenvector השלישי. זה פשוט מוכפל כל דבר ב eigenvector זו, רכיב חכם, על ידי הערכים העצמיים. וזה מה שהיינו מצפה, כי זה מה שהם ערכים עצמיים. יש כאן מישהו שלא לקח אלגברה לינארית? כמה אנשים, על אישור. פשוט לכבות את המוח שלך קצת. ואכן, אם אנחנו לוקחים אייגן n ערכי סימן דולר 3 פעמים vec, גם לקבל את אותו הדבר. זה מעוצב באופן שונה כשורה וקטור במקום וקטור עמודה, אבל עניין גדול. ולכן אלה הם בעצם נחמדים דברים שאנחנו יכולים לעשות עם מטריצות, רשימות הפגינו. אני צריך להפגין נחמד דברים על פונקציות כמו גם. אז בואו say-- [לא ברור] פונקציה, השיחה בואו זה func נגד פונקצית n n squared-- למעשה, זה לא באמת הטוב ביותר. , ב, בתוספת בריבוע B. אז דבר אחד על פונקציות, שוב, הוא שהם לא צריכים הצהרות תמורה מפורשות. אז אתה יכול פשוט- ההצהרה האחרונה הוערכה תהיה ההצהרה חזר, או מחזיר את הערך. אז במקרה הזה, אנחנו מעריכים רק הצהרה אחת, ב בתוספת בריבוע. שיהיה ערך החזרת ברירת מחדל. זה לא כואב לשים ב לחזור ערכים במפורש, עם במיוחד אם יש לך עסק פונקציה של היגיון מאוד מסובך זְרִימָה. אבל אתה לא צריך אותם. אז עכשיו אנחנו יכולים לעשות func 5, 1, ו זה בעצם מה שהיית מצפה. משהו אחר שאנחנו יכולים לעשות, אנחנו באמת יכולים לעשות func ב שווה 1, שווה 5. אז אם אנחנו לציין שמספר כאן, שטיעון הולך שטיעון בפונקציה, אנחנו יכולים להעיף סביב ערכים אלה בכל מקום שאנחנו רוצים. קהל: האם יש סיבה כדי לכתוב את זה עם B שווה לעומת רק באמצעות המספרים ופסיק? CONNER אריס: כן, בדרך כלל לעשות את זה אם יש לך פונקציות עם הרבה ויכוחים. זה יכול להיות לעתים קרובות כמו דגלים שרק היית רוצה להשתמש במקרים נדירים. ודרך זו תוכל only-- יכול להתייחס לטענות הספציפיות שברצונך להשתמש ערכים שאינו ברירת מחדל ל, ואתה לא צריך לכתוב את חבורה של דגלים שווים שווא אחריהם. או שאני יכול לכתוב את זה שוב עם ערך ברירת מחדל כמו ב שווה 2. ואז אני יכול לעשות את func F, אני אעשה 4, 1 זה זמן. ו -17, אשר הוא 4 בריבוע בתוספת 1, כפי שאתה יכול לצפות. אבל אני גם יכול רק קורא לזה עם func 4, ואני אקבל 18, משום ש אני לא תציין ב. אז ב מקבל את ערך ברירת המחדל של 2. אוקיי, אז עכשיו אם אתה הבא יחד עם ההדגמה, הקלד את הקו הזה לפקודתך תנחה ולראות מה עולה. למעשה, לא עושה את זה. סוג זה. אתה צריך לקבל משהו כזה. אז mtcars הוא נבנה בנתונים נקבע להפגנה זו מטרות שמגיעה with-- שמגיע בברירת מחדל עם הפצת r. זהו אוסף של נתונים סטטיסטיים מ נושא -1974 של מגזין Motor Trend במספר דגמי מכוניות שונים. אז יש מייל לגלון, cylinders-- אני שוכח מה חד פעמי הוא-- כוחות סוס. כַּנִראֶה. אם אתה רק מכוניות Google MT, אז אחת מהתוצאות הראשונות יהיה מ תיעוד r רשמי והוא יסביר כל שדות נתונים אלה. אז משקל הוא-- WT הוא משקל של המכונית בטון. Q שניות היא הזמן רבע מייל. אז עכשיו אנחנו יכולים לעשות כמה דברים כיף על מכוניות MT הוא שדה נתונים. אז אנחנו יכולים לעשות דברים כמו שורת שמות, מכוניות הר. וזו רשימה של כל השורות ב נתונים שנקבעו שהם שמות של מכוניות. אנחנו יכולים לעשות את colnames, מכוניות הר זה. אם אתה עושה את מכוניות הר, מדד תת-מספרי, כמו 2. אנחנו מקבלים את העמודה השנייה מ זה, אשר יהיה צילינדרים. קהל: מה עשה? CONNER אריס: הקלדתי דואר מכוניות, סוגריים הר, שנתן לי את השנייה טור ממכוניות הר. או אם אנחנו רוצים שורה, אני יכול להקליד mtcars באמצעות פסיק 2, למשל. סיבוב 2 פסיק אחר, כמו ש. ושהולך בשורה שלך. זה כאן פשוט נותן לך טור, אבל טור כוקטור. רק עכשיו הבנתי עכשיו אני שכח להפגין כמה דברים מגניבים על וקטורים שאתה יכול לעשות עם מדדים. אז תן לי לעשות את זה עכשיו. אז בואו לעשות לשים ג gets-- זה על פי 2 pause-- 1 עד 10. אז ג הוא פשוט הולך להיות הווקטור 2 עד 20. אני יכול לקחת אלמנטים כמו זה, C2. אני יכול לעבור בוקטור כמו זה, תן לי c-- להשתמש בשם שונה מג, כמו ג vec. בעיקרון, אני עושה זה כל כך אתה לא מקבל מבולבל בין ג כ פונקצית בניית וקטור, ולאחר מכן ג כשם משתנה. סוגריים vec ג 4, 5, 7. זה יהיה להוציא אותי מרביעי, חמישי, ושבעה אלמנטים של המערך. אני יכול לעשות vec, להכניס לשלילי מדד, כמו 4 שליליים. שיקבל אותי זה עם האלמנט הרביעי הוסר. אז אם אני רוצה לעשות פרוסות, אני יכול לעשות vec 2 עד 6. 2 נקודתיים 6 היא רק עוד וקטור, שהוא 2, 3, 4, 5, 6. יורק את זה. אז בכל אופן, בחזרה למכוניות הר. אז בואו נעשה קצת רגרסיות. נניח שמודל gets-- בוא באופן ליניארי regress-- אני לא יודע. ראשית בואו ניתן לצרף mtcars, כמובן. אז [לא ברור] LM מודל, בוא לסגת מייל לגלון במשקל טילדה. ולאחר מכן מסגרת הנתונים היא mtcars. אז מודל סיכום. אוקיי, אז זה נראה קצת מסובך. אבל בעצם, רואה כאילו אנחנו אנסה להביע את מייל לגלון כפונקציה ליניארית של משקל, אז יש לנו את הקו הזה כאן, שמיירט ב37.28. 37.28 יהיו מיילים התיאורטי לגלון של מכונית ששוקלת אפס. ולאחר מכן לכל טון נוסף, אתה דופק על חמישה מייל לגלון הנחה של ש. שני מקדמים אלה ניתן לראות, שגיאות סטנדרטי שם. והם מאוד משמעותי מבחינה סטטיסטית. אז אנחנו יכולים להיות מאוד מסוימים ל 1 דואר 10 עד 10 השליליים. אז 1 פעמים משהו השלילי 10, שאם אתה עושה את המכונית כבדה יותר, זה יהיה יותר גרוע קילומטרים לגלון. או שאנחנו יכולים לבדוק כמה מודל אחר. כמו במקום רגרסיה זה על משקל, בואו לסגת אותו על יומן משקל, כי אולי המשקל היעיל על קילומטראז הוא איכשהו לא ליניארי. זה נתן לנו r בריבוע של .7528. אז בואו ננסה את זה. הפעם בואו נעשה משתנה שונה, מדי. Model2. אז לסיכום, model2. בסדר, אז שוב, אנחנו יש הקו בכושר הטוב ביותר שלנו כאן. וזה time-- זה אומר, בעצם שכל פעם שאתה להגדיל את המשקל של מכונית בפקטור של דואר אתה מאבד קילומטרים רבים זה לגלון. ואז זה זמן סטנדרטי השיורי שלנו השגיאה it-- זה לא משנה, באמת. השגיאה סטנדרטית השיורי היא בעצם רק השגיאה סטנדרטית שהשארת אחריך לקחת את קו המגמה. וr בריבוע שלנו כאן הוא 0.81, שהוא קצת יותר טוב ממה ש היו לנו לפני, 0.52. ואז עכשיו בואו נוסיף טווח לרגרסיה זו. אז בואו לסגת מייל לגלון שני ביומן של המשקולות ו, בואו לעשות, מייל q, זמן רבע מייל. אישור, זה חייב להיות כל-- בסדר, qsec. Qsec. מעשה-- מצטער, מה? תן לי לקרוא משהו זה אחר מלבד model2. תן לי לקרוא model3 זה. אז עכשיו אנחנו יכולים לעשות model3 סיכום. וכך שוב, זה בעצם מה שאפשר לצפות. יש לך ליירט חיובי. יעיל הגדלת המשקל הוא שלילי. ויעיל זמן רבע מייל הגדלת הוא חיובי, אבל למרות ש פחות ממשקל. עכשיו באופן אינטואיטיבי, אתה יכול להבין זו באומרו לחשוב על מכוניות ספורט. יש האצה מהירה מאוד, פעמים רבע מייל קצר מאוד. הם גם הולכים להשתמש יותר גז, אילו מכוניות הגיוניות יותר הולכים יש תאוצה איטית יותר, פעמים רבע מייל גבוה יותר, ולהשתמש בפחות גז ,, כך מיילים לגלון גבוהים יותר. גדול. ואז עכשיו זה זמן עלילה משהו כזה. אז בואו do-- כך חשוף עצמות שאנחנו יכולים לעשות plots-- כי אני כבר מצורף מסגרת נתונים זה before-- אנחנו יכולים פשוט לעשות את החלקות, mpg WT. להפוך את זה לקצת יותר גדול. יש, בעצם יש לנו עלילת פיזור, אבל נקודות הם סוג של קשה לראות בזה. אני לא זוכר מה כלאחר יד תחביר הוא לשינוי העלילה. אז אני מניח שזה יהיה זמן טוב להעלות את, יש עזרה builtin מאוד נחמדה תכונה, ציטוטי עזרה לתפקד שם. אנחנו נביא את בעצם כל דבר שאתה רוצה. אני חושב שאני באמת אעשה את זה סוג שווה p עבור חלקות נקודות. האם זה משנה משהו? ולא, לא ממש. בסדר. מסיבה כלשהי, כאשר עשיתי את זה במחשב שלי לפני כמה זמן, כל נקודות הפיזור היו הרבה יותר ברורים. בכל אופן, הוא הסוג של הפיזור גלוי? יש אחד שיש. כמה יש, כמה יש. אתה סוג של יכול לראות אותם, נכון? אז אם אנחנו רוצים להוסיף קו בכושר הטוב ביותר לעלילה זו כאן, וזה קצת חשוף bones-- תן לי לעשות את זה קצת יותר נחמד. ראשי שווים לעומת משקל. מייל לגלון. שוב, אתה יכול לראות כמה שימושי טיעונים אופציונליים נמצאים כאן עם גם לא שיש לשים את הדברים ב סדר מסוים עם טיעוני מקלדת כאשר יש לך חלקות, משום ש אלה לקחת הרבה ויכוחים. Xlab שווה משקל, משקל, טון. בסדר. אישור, כן, המכשיר הזה הוא להיות קצת מעצבן. אבל אתה יכול לראות סוג של שם למעלה, יש כותרת גרף בצד. כאן יש-- בתחתית כאן יש תוויות ציר. אני לא זוכר אגב מה פקודות ars-- מה הפונקציות כדי להגדיל גודלם של תוויות וכותרות, אבל הם שם. ולכן אם אנחנו רוצים להוסיף את השורה בכושר הטובה ביותר, אנחנו יכולים לעשות משהו like-- אני כתב את התחביר כאן. אז זוכר שרק להוסיף מודל היה mpg, משקל, mtcars. ולכן אם אני רוצה להוסיף הטוב ביותר בכושר קו, שאני יכול לעשות מודל, קו B. ובום, יש לנו קו בכושר הטוב ביותר. זה קצת קשה לראות שוב. אני די מצטער על קשיים טכנולוגיים. אבל הוא פועל בעצם עליון משמאל לימין תחתון. ואם בקנה מידה היה גדול יותר, אתה יכול לראות שליירט הוא מה שאתה יכול למצוא מסיכום הנתונים הסטטיסטיים אם תקליד מודל סיכום. בסדר, אז אני מקווה שכולם מקבל משהו מתחושה של מה ש R הוא, מה זה טוב ל. אתה יכול לעשות את מגרשים רחוקים יותר נחמדים זה על הזמן שלך, אם תרצה. אז ממשק הפונקציה הזרה. זה משהו שהוא בדרך כלל לא מכוסה בהרצאות מבוא או כל דבר מבוא למחקר. זה לא סביר שאתה הולך צריך את זה. עם זאת, מצאתי את זה שימושי ב הפרויקטים שלי בעבר. ואין טוב הדרכה לזה באינטרנט. אז רק אני הולך למהר כל מה שאתה תעבור את זה ואז אתה חופשי לעזוב. וכך זר ממשק פונקציה הוא מה אתה יכול להשתמש בו כדי לקרוא לראות פונקציות עם ר 'פנימי, R בנוי על חשבונו של ג R הוא פשוט חשבון הנקודה צפה של 64 סיביות של C, שהוא כפול סוג [לא ברור]. ואולי כדאי לך לעשות זה עבור חבורה של סיבות. לאחד, R מתפרש, זה לא נערך עד קוד מכונה. אז אתה יכול לשכתב אותך לולאות פנימיות בC ולאחר מכן לקבל היתרון של שימוש בר 'כמו זה קצת יותר נוח מאשר ג יש לו גרפים טובים יותר מתקנים ומה לא. ועדיין להיות מסוגל לקבל במהירות שיא מהלולאות הפנימיות, המקום שבו אתה באמת צריך את זה. שימוש חוזר בספריות C קיימות, זה גם חשוב. אם יש לך כמה ספריית C עבור כמו, אני לא יודע, פורייה הופך, או כמה Archean מאוד הליך מדדים סטטיסטי באסטרופיזיקה אנרגיה הגבוהה או משהו, אני לא יודע. אסטרופיזיקה אנרגיה גבוהה הוא אפילו לא חושב, אני חושב. אבל אתה יכול לעשות את זה במקום שיש לכתוב נמל R ילידם. ועל כל-- ושוב, כמו אם נראה ברוב ספריות ברירת המחדל של R, על internals, internals הם הולך להשתמש בפונקציה הזרה ממשק מאוד נרחב. תהיה להם דברים כמו פורייה הופך או מחשוב מתאם מקדמים נכתבו ב- C, והם יהיו רק צריכים עטיפות R סביבם. הממשק הוא קצת קשה. אני חושב הקושי שלה הוא מוגזם ב הרבה הוראות שתמצאו. אבל בכל זאת, זה קצת מבלבל. ולא היינו מסוגל למצוא הדרכה טובה לזה, אז זה זה עכשיו. שוב, כל הקטע הזה הוא יותר לעיון מאוחר יותר. אל תדאגו העתקה את הכל עכשיו. אז ההוראות הבאות הם למערכות כמו יוניקס, לינוקס, BSD, X. מערכת ההפעלה אני לא יודע איך זה עובד על Windows, אבל בבקשה פשוט לא עושה פרויקט גמר ב- Windows. אתה באמת לא רוצה. יוניקס הוא קבוצה הרבה יותר טובה לתכנות מזדמן. אז, בעצם זר ממשק פונקציה. אם אתה רוצה לכתוב C פונקציה לשימוש עם R, יש לנקוט בכל טיעונים כמצביעים. אז לערכים בודדים, זה פירוש זה הצביע על הערך. למערכים, זה הוא מצביע לאלמנט הראשון, ש מה שמות מערך באמת מתכוונים. שוב, זה משהו שצריך להיות לך די לגמרי למטה אחרי עמ 'להגדיר חמש. שמות מערך הם רק מצביעים לאלמנט הראשון, סוג הנקודה צפה הוא כפול. והתפקוד שלך יש לחזור חלל. הדרך היחידה שהוא יכול בעצם אומר לי R מה שקרה הוא על ידי שינוי הזיכרון שR נתן אליו דרך הפונקציה הזרה מִמְשָׁק. אז כתבתי את זה דוגמא כאן, זה הוא פונקציה שמחשבה שימוש מוצר נקודה של שני וקטורים. זה לוקח שני טיעונים, vec1, vec2, שהם הווקטורים עצמם, ואז n, שהוא אורך, כי שוב, R בנה ב[ לא ברור] כדי לגלות האורך של וקטורים, אבל C לא. ב- C, וקטורים הוא שרירותי נתח מופרד של זיכרון. אז הדרך שתוכל לחשב מוצרי dot הוא פשוט להגדיר את זה פרמטר לאפס ואז לחזר דרך מ -1 עד n לככב, כי N של מצביע לאורך, רק להוסיף משהו ל זה את פרמטר. וזה יכול להיות תרגול טוב אם אתה הולך לעשות זה לכתוב שתי פונקציות C נפרדות. אחד מהם has-- אחד מהם רק לוקח את הטיעונים וסוגים שהם יהיו בדרך בג אז זה לוקח מערך טיעונים כמצביעים. אבל טיעונים חד ערכיים כמו n, זה פשוט לוקח כערכים על ידי העתקה, ללא מצביעים. ואז זה לא מצביע [לא ברור] החוצה. ואז אתה יכול לקבל שונה, בעצם, פונקצית מעטפת שבעצם מטפל בדרישות של הפונקציה הזרה ממשק בשבילך. הדרך בה אתה קורא לזה בR היא, פעם אחת יש לך הפונקציה שלך נכתבה ב- C, אתה מקליד shlib cmd R, R ספרייה משותפת הפקודה, foo ג נקודה, או מה ש שם הקובץ שלך הוא, ומערכת ההפעלה לא להפגיז במסוף R. וזה ייצור ספרייה נקראת foo נקודה כל כך. ואז אתה יכול לטעון אותו ב התסריט או אינטראקטיבי שלנו עם עומס נקודת DYN הפקודה. ואז יש פונקציה במחקר בשם ג נקודה. זה לוקח טיעונים ש ראשון את השם של הפונקציה בC שאתה רוצה לקרוא. ולאחר מכן את כל הפרמטרים לפונקציה ש, הם צריכים להיות בסדר הנכונים. אתה צריך להשתמש בסוג אלה פונקציות כפייה כשלמה, כ כפול, כדמות, והגיונית כ. ואז כשהוא חוזר רשימה, ששוב היא פשוט מערך קשור של שמות פרמטר והערכים לאחר הפונקציה יש להפעיל. אז במקרה הזה, בגלל לדרבן נקודה יש טיעוני vec1, vec2, וint n, n החוצה. כדי נקודה ג יש לנו לדרבן נקודה, שמו של הפונקציה אנחנו קוראים, vec1, vec2, לכפות סוג. האורך של שני וקטורים, אני רק בחרתי vec1 באופן שרירותי. זה יהיה יותר חזק כדי לומר של אורך שלם דקות של vec1, vec2 אורך. אז בדיוק כמו אפס כפול, כי אנחנו לא באמת אכפת לי מה עובר ל פרמטר החוצה בגלל שאנחנו הגדרת את זה לאפס בכל מקרה. ואז תוצאות הולכים להיות המערך הקשורים גדול של יסוד vec1 הוא מה, vec2 הוא מה. אבל אנחנו מתעניינים ב החוצה, כדי שנוכל לקבל את זה. זה שוב, דוגמא צעצוע מאוד של ממשק פונקציה זרה. אבל אם אתה צריך לחשב נקודה מוצרים של וקטורים מסיביים בלולאות, או אם אתה צריך לעשות משהו בלולאה אחר, ואתה לא רוצה להסתמך על R, שיש לו קצת מעל נבנה לתוך זה, זה יכול להיות שימושי. שוב, זה בדרך כלל לא נושא מבוא לר ' זה לא מתועד היטב. אני רק כולל את זה כי אני מצאתי את זה שימושי בעבר. שיטות אז, רעות. שציינתי שיש ללולאה בתפקוד. בדרך כלל אתה לא צריך, ב השפה, לא להשתמש בו. בהתבסס על איך מיישם R איטרציה פנימי, זה יכול להיות איטי. הם פשוט גם מכוערים. R מטפל וקטורים יפה מאוד, כל כך לעתים קרובות אתה לא צריך להשתמש בו. אז אתה יכול בדרך כלל להחליף וקטור לעתים קרובות עם פונקציות אלה נקראים גבוהים פונקציות כדי, מפה, צמצום, מצא, או סינון. אני רק אתן כמה דוגמאות למה אלה לעשות. מפה היא פונקציה מסדר גבוהה יותר משום ש זה לוקח תפקיד כטיעון. אז אתה יכול לתת לו פונקציה, אתה יכול לתת אותו מערך, והוא יחול הפונקציה לכל אלמנט של המערך ולהחזיר את המערך החדש. להפחית, בעצם אתה נותן זה מערך, אתה נותן לו פונקציה שלוקחת שתי טענות. היא תחול הפונקציה ראשונה, טיעון ראשון עם כמה ערך המתנע. אז לתוצאה שבשנייה. אז לתוצאה שבשלישית, אז לתוצאה שברביעית. ואז לחזור כשהוא מגיע לסוף. כך למשל, אם ברצונך לחשב את הסכום של כל האלמנטים במערך, ממה שאתה יכול לקרוא לי להפחית עם [לא ברור] להפחית בנוסף פונקציה, כמו func , ב, לחזור ב בתוספת. ולאחר מכן להתחיל ערך של 0. וכל אלה, אתה יכול למצוא אותם מתואר בתיעוד R, בספר לימוד כלשהו ב תכנות פונקציונלי. יש גם המעמד הזה של פונקציות נקראות להחיל פונקציות, שאני don't-- הם קצת קשה להסביר, אבל אם אתה מסתכל ב[ לא ברור] הזמנתי שצוטטתי בתחילת, הוא מסביר להם די טוב ב הנספח שלו על תכנות R. נוסף על נהלים, צירוף לוקטורים. כֵּן? אני חושב שאני צריך לתקן את זה. שבשורה ראשונה, חץ vec, חץ שלא צריך להיות שם. ניתן להקצות לוקטור, שוב, על ידי לקחת אורך בתוספת 1 והקצאת ערך כלשהו לכך. שאאריך את הווקטור, או שאתה יכול לעשות ג שווים vec, NEWVALUE vec. שוב, אם אתה משתמש ב- C עם טיעון אחד כוקטור, ההיררכיה וכתוצאה מכך מקבלת בברוטליות. אז אתה פשוט מקבל וקטור זה הוארך 1. אף פעם לא לעשות את זה. הסיבה למה אתה לא צריך לעשות את זה הוא זה. כאשר אתה להקצות וקטור, זה נותן לה נתח מסוים של זיכרון. אם תגדיל כי גודל וקטור, יש להקצות מחדש את הווקטור במקום אחר. וכך הקצאה מחדש היא די יקרה. אני לא אכנס לפרטים של איך מקצי זיכרון מיושמים ברמת מערכת הפעלה, אבל זה לוקח הרבה זמן למצוא נתח חדש של זיכרון. וגם, אם אתה הקצאה מחדש המון המון של בהדרגה גדולה יותר נתחים, אתה בסופו עם משהו שנקרא פיצול זיכרון, שבו הזיכרון זמין הוא מחולק להמון לוקים קטנים בנקודת מבט מקצי זיכרון. וזה נהיה קשה יותר ויותר כדי למצוא זיכרון לדברים אחרים. אז במקום, אם אתה צריך לעשות את זה, אם אתה צריך לגדול וקטור מקצה אחד למשנהו, במקום להוסיף לזה כל הזמן, אתה צריך מראש להקצות אותו. חץ vec, אורך וקטור שווה 1,000, או משהו כזה. ואז אתה יכול פשוט להקצות לערכים אחד של הווקטור זמן מה לאחר שהוקצית את זה פעם אחת. נתקלתי בזה, שוב, עבודת הקיץ שלי כשכתבתי ההפרש NRA פותר משוואה. לא סמלי מספרי. הרעיון הוא שברגע שיש לך ערך אחד לפתרון שלך, אתה משתמש בזה כדי לחשב את הבאה. אז טבעי נאיבי נטייה הייתה לומר על אישור, אז אני אתחיל עם וקטור זה ערך משמעותי. לחשב שמהערך הבא שהולך על וקטור הפתרון שלי, ולצרף את זה. ליצור משהו אחר, לצרף את זה. זה הלך מאוד, מאוד לאט. וברגע שהבנתי את זה ושיניתי את המערכת שלי מצירוף לוקטור זה כמו 10,000 עד 100,000 פעמים, רק מראש הקצאת וקטור ופשוט רצתי עם זה. יש לי יותר מ -1,000 את המהירות של פי. אז זה מאוד נפוץ מלכודת לתכנות R. אם אתה צריך לבנות את וקטור פיסה אחרת פיסה, מראש להקצות אותו. עוד טיול משותף up-- זה אחרון שלי שקופיות, לא worry-- הוא טיפול בשגיאות. R, להיות כנה, לא טוב מאוד באמת לעשות את זה. יש הרבה בעיות שיכולים לצוץ. לדוגמא, אם אתה מקבל מערך או וקטור מתוך פונקציה שציפיתם יחיד ערך לבוא מ, או להיפך, ואתה עובר את זה בפונקציה ש אתה כתב מצפה ערך יחיד, כי יכולה להיות בעיה. פונקציות מסוימות תחזיר null כלעשות, למשל, קריאה מ מפתח אינו קיים ברשימה. אבל null הוא לא כמו C שבו אם אתה מנסה לקרוא ממצביע ישן, [לא ברור] לnull מצביע, זה פשוט צינוק תקלות ואם אתה בהבאגים שלך זה אומר לך בדיוק איפה אתה נמצא. במקום זאת, null יהיה do-- פונקציות יעשה דברים בלתי צפויים אם הם ריקים ביד. כמו שאם אתה מסר null מקסימום, זה ייתן לך אינסוף שלילי. וכך, כן. וכך זה קרה לי פעם שהייתי לי השתנה חבורה של שדות במבנה הרשימה שלי פעם אחת מבלי לשנות אותם במקום אחר כאשר אני קורא מהם. ואז יש לי כל מיני אקראיים תוצאות אינסוף לצוץ ולי מושג מאיפה הם באו. ולמרבה הצער, יש אין מצב מחמיר R אמיתי שבו אתה יכול להגיד אם משהו נראה כמו שזה יכול להיות שגיאה, רק לעצור שם כדי שאוכל להיות ממושמע ולתקן את זה. עם זאת, יש משהו נקרא תחנה אם לא. זה שווה לתבוע את של C, אם אתה כבר דיברת על זה. אני לא חושב שC טוען הוא נושא הרצאה, אבל מנהיג הסעיף שלך אולי הלך על זה. ואם לא תפסיק בעצם לוקח כל נשוא, ולכן כל אמירה ש יכול להיות אמת או שקר. ואם זה שקר, הוא מפסיק את תכניתה. זה אומר לך בדיוק מה הקו ש היו ובמה המצב נכשל. וזה מאוד שימושי, למשל, בדיקת שפיות, תשומות פונקציה. אז אם יש לך פונקציה ואתה מצפה, למשל, אם אתה צריך לתת לי תאריך, אני רוצה התאריכים להיות פשוט וקטור באורך 1 ואי שם בין 1 ו -31. ואם לא, אני יודע משהו השתבש. ואני בוחר לעצור שם לפני זה יש דפיקה אקראית על השפעות עם קוד שזה קשה לאתר דרך. אז זה אפשרי אחת להשתמש לתחנה אם לא. בכל אופן, על אישור. אז זה הסוף. תודה רבה לך שבאת. אני חובבן בשלב זה. אז מצטער או אם אתה משועמם מבולבל או מה שיש לך. אני שמח לקחת שאלות בדוא"ל בconnorharris@college.harvard.edu. זה הולך גם לכולם צופה זה לחיות או מאוחר יותר. כמו כן, אם כי אני לא TF, אני מאוד גם מוכן לשמש כרשמי יועץ לכל מי ש באמצעות R בפרויקט גמר. אם ברצונך ש, אז פשוט לדבר עם TF שלך ואז לכתוב לי מייל כל כך אני יודע מה אתה עובד על ואז אני יכול להגדיר את פגישה פעמים איתך אם אתה רוצה. אז שוב, תודה רבה לך. אני מקווה שאתה נהנה מזה. קהל: [לא ברור]. CONNER אריס: כמובן. קהל: איזה סוג של פרויקט היה תלמיד CS להשתמש R ל? CONNER אריס: אז אם אתה לא עושה משהו שהוא אך ורק בכריית נתונים, לדוגמא, ויש הרבה דברים אתה יכול לעשות עם זה עם הנתונים כרייה ולמידת מכונה. אולי אתה רוצה להשתמש R ל רכיב של משהו. העליתי, במקור, הדוגמא של אם אתה כותב באתר ואתה רוצה להריץ אוטומטי ניתוח סטטיסטי של השרת שלך יומנים בזמן מסוים בכל יום, שעשוי להיות משהו ש מאוד קל לעשות רק קצר תסריט R שאתה יכול לתזמן לרוץ כל לילה, למשל. ואני בטוח, אם יש כל סיבה שהיית רוצה סטטיסטיקה או יכולות גרפים ויש לי ריצה זו באופן אוטומטי במקום שיש לאינטראקציה עם דברים ב- Excel, לדוגמא, זה משהו אולי כדאי לך להשתמש בR ל. אז עוד שאלות לפני שאני עוזב? לא? בסדר, גם, שוב, תודה רב לך שבאת.