康納哈里斯:我還是 想一些令人興奮的視頻 由專業諮詢公司製作 使用R A大量的工作。 旁白:什麼是背後的統計, 在分析和可視化 今天最亮的數據科學家 和商界領袖依靠 做出強有力的決策? 您可能不總是看到它。 但它的存在。 這就是所謂的R,開源R--的 統計編程語言 全球數據專家 過度使用的一切 從映射廣泛的社會 與市場趨勢在線 以發展金融和氣候 模式,有助於推動我們的經濟 和社區。 但究竟什麼為R 和在哪裡R開始? 本來嘛,R開始 這裡兩位教授 誰想要一個更好的統計 平台為他們的學生。 因此,他們創建了一個模型 統計語言S.後 他們和許多人一樣, 不停地工作,並使用R, 對於R創建工具和查找 對於R每天都有新的應用程序。 由於這是 世界各地的社區的努力, ř持續增長數千 內置用戶創建庫 提升自主功能和 人群來源的質量驗證 從最被認可的支持 行業領袖在各個領域的 使用R.這是偉大的,因為 R是最擅長做什麼。 迅速萌芽專家 很容易理解,互動, 和可視化的數據顯示其迅速 ř全球用戶不斷增長的社區 並了解如何開源 - [R繼續塑造 統計未來 分析和數據科學。 康納哈里斯:好,太好了。 所以我自己的演講 會多一點清醒。 它不會涉及到多 令人振奮的背景音樂。 但是當你在視頻中看到,R是排序 的通用程序語言。 但它的創建主要是 對統計工作。 因此,它的設計進行統計, 進行數據分析,數據挖掘。 所以你可以看到這個在很多 該設計選擇R的製造商 進行。 它的設計主要是, 人誰不 專家在編程,誰 剛拿起節目 就在身邊,使他們可以做他們的工作, 在社會科學或統計學 或什麼的。 它有很多非常 從C.重要的區別 但語法和範例 它使用大致相同。 你應該覺得很 駕輕就熟了蝙蝠的權利。 這是命令式語言。 不要太擔心了 如果你不知道這個詞。 但是有一個區別 當務之急,聲明之間, 和功能。 當務之急只是意味著你做 語句基本上都是命令。 再解釋或 計算機跟隨他們一個接一個。 它的弱類型,有 在R沒有類型聲明 然後行 不同類型之間 更寬鬆的不是位 它們是在C中,例如。 正如我說有 非常廣泛設施 對於圖形,統計 分析,數據挖掘。 這些都被內置到 語言和,作為視頻說 數以千計的第三方庫 你可以下載並免費使用 非常寬鬆的許可條件。 因此,在一般情況下,我建議 你看看這兩本書 如果你去工作,R.一 他們是官方ř初學者 指南。 它是由維護 R的核心開發人員 你可以重新下載,免費的 充電和法律上的該鏈接存在。 所有這些載玻片要去 在互聯網上,在CS50網站 後這樣做。 因此,沒有必要複製 下來瘋狂。 另一種是 教科書卡斯馬Shalizi, 誰是一個統計學教授 卡內基·梅隆大學,被稱為高級數據 從分析 查看的基本點。 這不是主要的R書。 這是一個統計的書, 這是一個數據分析的書。 但它是人們十分便利誰 有統計數據的知識一點點。 我從來沒有採取正式課程。 我只知道的點點滴滴 從各有關學科 我已經在採取課程。 我能夠理解 它非常清楚。 所有附圖中給出 在R它們R中製成 他們也有代碼清單 每個數字下面告訴您 如何使每個人物有R代碼。 這就是,如果非常有用 你想效仿 有些圖你在書上看到的。 並再次免費下載 stat.cmu.edu/cshalizi/對不起, 應該削減波浪cshalizi。 我會確保糾正 當官方的幻燈片上。 / ADAfaEPoV這僅僅是 首字母縮寫的書名。 所以一般caveats--ř 有很多的功能。 我只是要能夠覆蓋 很多事情的表面。 研討會也在第一部分 將是一些數據轉儲。 我很抱歉。 基本上,我要去 向您介紹了很多東西 馬上蝙蝠,去 盡快。 然後我們去 有趣的部分,這是 演示,我可以告訴你一切 我們已經在屏幕上談到。 你可以在你自己玩。 因此,有將是一個很大的 技術的東西扔了就在這裡。 不要擔心複製所有下來。 因為,你可以得到所有的 東東在CS50網站後。 而B,這不是真的那麼重要 從幻燈片記住這一點。 它更重要的是,你得到 一些直觀的設施與它 而來自只是在擺弄。 那麼為什麼要使用R' 基本上,如果你有一個項目, 涉及挖掘大型數據集,數據 可視化,你 應該使用R.如果你 做複雜的統計分析, 這將是很難在Excel, 例如,它會 也可以還good-- 如果你正在做統計 分析認為的自動化。 比方說,你正在維護網站。 你想讀的服務器日誌 每一天,編譯一些名單, 像上面國家的 您的用戶來自哪裡, 多久了一些匯總統計 他們花費在您的網站或什麼的。 而你要每天這樣跑。 現在,如果你這樣做是在Excel中, 你必須去你的服務器日誌, 導入到 Excel數據表格, 手動運行所有的分析。 隨著R,你可以寫一個腳本。 安排其運行每一天 從您的操作系統。 然後每天晚上凌晨2:00, 或者當你安排其運行, 它會通過看你的 互聯網流量的那一天。 然後到了第二天,你會 有這樣的光澤,新報告 或與所有的任何 信息你問。 所以基本上R是用於Cisco 編程與思科的分析。 初步完成。 讓我們進入真正的東西。 因此,有三個實 類型的語言。 有數字類型。 有排序之間的差的 整數和浮點, 但不是真的。 有一個字符 型,這是字符串。 還有的邏輯 類型,這是布爾值。 你可以類型之間的轉換 使用這些功能的數字, 人品,作為邏輯。 如果調用,例如, 作為數字上的繩子, 它會嘗試讀取該字符串 作為一個數,以相同的方式 這A2I和scanf做,和C.如果 你叫的數字上真的還是假的 將轉換為1或0。 如果調用的字符 任何東西,它會 將其轉換成 字符串表示。 再就是向量和矩陣。 因此,載體基本上是 1維數組。 他們就是我們所說的陣列 C.矩陣,2維數組。 再高 維數組,你可以 有3個,4個,5個維度或任何 數值串, 的邏輯值。 您還可以列出哪些是 一種關聯數組。 我會進入一個位。 因此,一個重要的事情 是旅行達人在研發 是不存在 真正的,純粹的原子類型。 有間沒有實際的區別 一個數,像一個數值, 數值和列表。 數值實際上是 相同長度為1的向量。 這具有許多 重要的意義。 一,這意味著你可以做 事情很容易涉及 如添加一個數字的向量。 R將基本圖 什麼你的意思。 我會得到,在第二。 這也意味著,有沒有辦法 該類型checker--的程度 這類似的東西 存在於R--告訴 當你傳遞的單個值 當它期望的陣列,反之亦然。 而這可能會導致一些奇怪的 麻煩,我碰到的時候 我在我的暑假作業使用R上。 並且沒有混合類型的數組。 所以,你不能有一個數組是的 第一要素是,我不知道, 字符串“約翰”和 第二個因素是42位。 如果試圖這樣做,那麼你會得到 一切都只是轉換為字符串。 因此,我們有串約翰,串42。 因此,不尋常的語法features--最 的R語法非常類似於C. 有幾個重要的不同。 打字非常弱。 因此,有沒有變量聲明。 分配使用的怪 錯誤操作員小於連字符。 評論與#號。 我想現在日子裡,我們把它叫做哈希標籤 雖然這不是真正accurate--不 雙斜杠。 模塊化的殘留物與%%的跡象。 整數除法是%/%,這是 很難閱讀時,它的預測 在屏幕上。 你可以得到的範圍 整數,結腸。 因此,2,5會給你一個向量 的所有的數字2到5。 數組是一索引, 這螺絲了很多人 ,如果他們是從更 典型的編程語言, 像C,其中最 事情是零索引。 再次,這是其中R的傳統 對於喜歡不是一種語言 專業編程人員的用武之地。 如果你是一個社會學家或 一個經濟學家或東西 而你嘗試使用 - [R基本上作為一種輔助 你更重要 業務, 你會發現 一個索引多一點自然的。 因為你開始計數 在1在日常生活中,不為0。 for循環,這類似於 在fo​​reach構建在PHP中, 你會得到 學習in--很快。 這是對價值的載體 那麼你可以做的事情的價值。 聽眾:那是拿出在課堂上。 康納哈里斯:噢,那是 拿出講座,優秀的。 聽眾:分配,是 應該從正確地指出剩下什麼? 康納哈里斯:從右到左,是的。 你可以把它看作是對價值 推入變量的權 在左邊。 聽眾:OK。 康納哈里斯:最後 函數的語法是有點怪。 你函數名FOO,分配 這個關鍵字的功能,其次 所有的參數,然後 體後的功能。 同樣,這些東西可能 看起來有點怪。 他們會成為後的第二天性 您使用了一點的語言。 因此載體,方式 構造一個向量 你是C類,這是一個關鍵字,那麼 所有你想要的數字或字符串 或什麼的。 參數也是載體。 但由此產生的數組被夷為平地。 所以,你不能有陣列,其中 有些元素是單數 有些元素是數組本身。 所以,如果你試圖構建 陣列是第一元件是4 和第二元件 是陣列3,5你 剛拿到三個元素的數組,4,3,5。 它們不能是混合類型。 如果您嘗試讀取或寫入 一個向量的邊界的外 你會得到這個值被稱為NA一 它代表一個缺失值。 這是為 像統計學家誰 正在使用不完整的數據集。 如果您應用的應該功能 拿一個號碼到一個數組 那麼你會得到的是,在 函數映射在陣列。 所以,如果你的函數讓我們說需要 數字,並返回其方。 您應用到陣列2,3,5 您將獲得的是陣列4,9,25。 這是非常有用的 因為這意味著你 不用寫for循環的 做這樣應用很簡單的事情 一個函數到數據集的所有成員。 如果您正在使用大型哪家 數據集,你必須做很多。 二元函數 通過進入應用條目。 我會到這一點。 您可以使用數組訪問它們 或用方括號載體。 所以向量名方括號1 會給你的第一要素。 矢量名方括號2 會給你的第二個元素。 你可以通過一個載體 指數和你會 找回了基本的子因素。 所以,你可以做載體的名字支架C,2,4 你會得到了包括矢量 第二和第四 數組的元素。 如果你想只是一個 快速匯總統計 像四分載體的 範圍內,中值,最大值,什麼的, 您只需鍵入匯總 矢量名,並得到了這一點。 這不是在真正有用的 編程,但如果你玩 周圍的數據集,這是得心應手。 Matrices--基本 高維數組。 他們有這個特殊的記號語法。 矩陣,獲取一個數組 充滿in--對不起,矩陣的數據, 行數,列數。 當你有一些數據,它填補了 陣列基本上將從上到下 第一。 然後從左向右。 所以,這樣的。 而R已經建成 矩陣乘法, 譜分解, 對角化,很多東西。 如果你想要更高的尺寸 陣列,所以3,4,5, 或任何方面,你可以做到這一點。 語法是數組暗淡等於C, 然後尺寸的列表。 所以,如果你想有一個4維數組 尺寸為4,7,8,9,陣列, 昏暗等於C(-4,7,8,9-)。 您訪問單個值與支架 第一項逗號第二個條目。 你可以得到整個切片 的行或列。 有了這個不完整的語法是 只是行號逗號或逗號列 數。 因此,列表是一種關聯數組。 他們有自己的語法在這裡。 同樣不瘋狂 複製這一切了。 這只是讓人們 經過幻燈片後 擁有這一切都在一個不錯的參考。 而這將成為很自然的,一旦 我實際上是通過演示走路。 因此,列出了主要相關陣列。 您可以訪問值 列表名稱,美元符號,鍵。 所以,如果您的列表名為foo, 那麼你就可以訪問它這樣。 你可以得到一個完整的鍵值對 通過傳遞在方括號索引。 如果你從一個不存在的閱讀 鍵,你會得到空。 它不會出錯。 事情是,R會做的 多與空,因為它可以。 這可能意味著,如果你 沒想到得到空出 一些列表讀,你會得到一些 不可預知的錯誤進一步回落 路線。 這發生在我身上我 暑期工當我使用ṛ 在那裡我改怎麼有一定 名單是在一個地方定義 但沒有後來就改 從它讀取值的代碼。 所以,事情的經過是我 讀空值出這份名單的, 將它們傳遞到功能, 而且是很迷茫 當我得到了各種各樣的 隨機無窮此起彼伏 在此功能。 因為如果你使用特定的最大 或最小功能為null, 你會得到無限的價值了。 數據幀,他們列表的一個子類。 每個值是一個向量 的長度相同。 而他們用於展示, 基本上,數據表。 有這種初始化語法。 這一切,再次,要多 更清晰的,當你到了演示。 約在好處 數據幀是你 可以給名稱的所有列 和名稱的所有行。 而這樣就使得訪問 他們一點友善。 另外這是大多數的功能, 閱讀從Excel電子表格中的數據 或從文本文件,例如, 將讀取其數據。 他們會把它變成 某種形式的數據幀。 所以functions--功能 語法是有點怪異。 再次它的功能的名稱, 分配,此關鍵字的功能,然後 參數列表。 因此,有一些不錯的東西 有關如何功能在這裡工作。 首先,你可以實際分配 缺省值的某些參數。 所以,你可以說R1 equals--你可以說FOO 是一個函數,其中,R1等於東西 如果用戶指定通過缺省 沒有參數。 否則,它是什麼,他插嘴說。 這是非常方便的 因為我們的很多功能 有動輒幾十或 數以百計的參數。 例如那些用於繪圖 圖表或繪製散點圖 有控制參數 一切從標題和軸 標籤的回歸線的顏色。 所以,如果你不想 讓人指定 其中每一個人 數以百計的參數 控制每一個方面 一個情節或回歸或什麼的, 這高興有這些默認值。 然後你其實可以 寫你看到的回到這裡。 或者找一個更好的例子。 當你調用函數,你其實可以 使用參數名稱調用它們。 所以這裡有一個例子 矩陣的構造。 它採用三個參數。 通常你的數據, 這是一個矢量。 你有N個行,這 是行數。 你有N個cols--列數。 如果您鍵入的是 ñ排等於什麼 和N COL等於什麼時 你調用這個函數, 你其實可以逆轉他們。 所以,你可以把ñ山坳第一和N行 第二,它將使沒有區別。 所以這是一個不錯的小功能。 難道進口和出口。 這是可以做到的,基本上。 也有設施寫出來 任意ř對象二進制文件 然後讀回在後面。 這是方便,如果你正在做的 一個大的互動環節 - [R 你需要保存 東西非常快。 默認情況下R的工作目錄 該文件被寫入伸到 和閱讀。最 你可以看到, getwg,它與setdw變化。 沒有什麼特別有趣這裡 所以,現在的實際統計 stuff--多元線性回歸。 因此,通常的語法 有一點複雜。 該模型基本上是一個大的對象。 它被分配給LM, 這是一個函數調用。 的第一元件,在y 波浪X1加上什麼。 我的語法,這裡是一個有點混亂。 我很抱歉,這 是標準的方式 該計算機科學書籍做到這一點。 但它是一個有點不可思議。 所以基本上,這是LM 括號,第一個項目 是變量 - 很抱歉,因 變波浪X1以及X2加 然而,許多獨立 變量你。 然後這些可以是 矢量,長度都相同。 或者它們可以是柱 在一個數據幀標題 您剛才指定的 第二個參數數據幀。 您還可以指定 更複雜的公式 所以你不必線性 倒退一個因變量, 或在一個預先存在的載體一種載體。 你可以這樣做,例如, 矢量分量Y的平方加1 而回歸的對抗 登錄一些其他的載體。 您可以打印的摘要 模型用這個命令被稱為 summary--只是總結模型的括號。 再次別的東西我要澄清。 別的東西,會得到糾正 在幻燈片上在互聯網上。 如果你只是想計算 一個簡單的相關性 你可以使用相關矢量 1矢量2功能核心。 方法是通過缺省 皮爾遜相關。 這些都是通用的標準,你可以做。 此外,還有斯皮爾曼和 Kendell關係 這是一些不同的 等級次序相關性。 那麼,他們不計算產品 向量相互之間的時刻, 但載體的軍銜命令。 稍後我會解釋。 聽眾:快問 CONNER哈里斯:當然可以。 聽眾:所以,當你計算 對於簡單的相關性做 你認為有一個統計 意義的相關? CONNER哈里斯:你不必。 直線運動基本上只是一台機器。 這將需要兩件事情 它會吐出 係數的最佳擬合線。 它還報告標準 錯誤的那些係數。 它會告訴你,就像是 攔截統計學顯著 或者從0差異。 是最好的斜率 擬合線統計 不同於零,等等。 因此,它假定什麼,我想, 是你的問題最好的答案。 好。 Plotting--所以主要的原因,你應該 使用R,像多元線性回歸。 基本上每一種語言 有一些設施的。 老實說的r語法 回歸是一個有點神秘。 但繪圖是它真正的亮點。 主力功能是陰謀 它需要兩個矢量,x和y。 然後橢圓代表一個非常 大量的可選參數, 控制一切,從標題到色彩 ,各線或各點 對情節類型。 你可以有散射 圖或線圖。 [聽不清] 2載體 的長度相同。 你可以先用這個連接 在你的腳本數據幀。 而這會讓你只使用列 頭,而不是分開的載體。 您可以添加最合適的線路和本地 回歸曲線的圖形。 這些命令上市 在這裡,AB線與線, 默認情況下,這些獲得 寫入到彈出窗口 因為它假設 您使用的是 - [R交互。 如果你不是,你可以 寫兩個文件 是真的是你想要的任何格式。 對不起,我有我才意識到一個錯字。 如果你想打開 另一種圖形設備 你可以使用這個功能叫做PNG或 JPEG或很多其他的圖像格式。 你可以寫圖形來 任何文件名指定。 要取消,你必須use-- 我沒有在slide--寫 但有一個功能叫做開發 點關閉不帶參數。 再就是設施 對於3D繪圖 和輪廓繪製 如果你想 兩個獨立的變量的曲線圖。 我不會進入這些現在。 也有一些 動畫設施 這些通常是 由第三方維護。 我已經做動畫有R圖, 但我沒有使用這些第三方 庫。 所以我真的不能證明 他們有多好。 我建議,如果你想 使基於R動畫 是你可以寫出所有的 為動畫幀 然後你可以使用一個 第三方program-- 典型的是所謂的FFmpeg 或ImageMagick--縫合 所有的幀成一個動畫。 因此,時間的演示。 所以,如果你使用任何類Unix系統 這是Linux的BSD,但誰使用BSD。 OS X打開一個終端窗口, 在命令提示符下鍵入R上。 如果你現在是R工作室或 等,它們也適用。 對於Windows用戶,您應該 能求R在開始菜單​​中。 它應該叫什麼 如R 64 3點什麼。 打開那裡。 所以,現在讓我只 打開一個終端窗口。 好吧,搜索。 聽眾:命令空間 CONNER哈里斯:命令空間,謝謝你們。 我通常不使用Mac電腦。 終端,顯示新窗口。 新的窗口設置 基本,R.所以你應該得到 一個值得歡迎的消息,這樣的事情。 所以我基於R交互。 你也可以自己寫的 - [R腳本。 基本上腳本運行 確切相同的方式 如果你坐在電腦 鍵入每行一次一個。 因此,讓我們開始通過一個載體。 一個箭頭C 1,2。 1,2,4。 可以,當然。 我可以讓字體大小大。 聽眾:命令加 CONNER哈里斯:命令加。 命令加。 好吧,是不是這樣? 好? 好。 因此,讓我們先來 聲明向量列表。 做一個,箭頭,C 1,2,4。 我們可以看到一個。 不要擔心支架存在。 該支架是如此,如果你打印出來 很長的陣列,我們可以在哪裡。 一個例子是,如果我 只想範圍為2〜200。 如果我打印了很 多頭排列,括號 只是這樣我就可以保持 跟踪哪個指數 我們是在如果我在尋找 通過這個直觀。 所以無論如何,我們有一個。 所以我說,陣列交互,然後 非常漂亮的,例如, 一元的操作是這樣的。 那麼,你認為我會 如果我輸入一個加1得到什麼呢? 是的。 好了,現在我要讓 這種不同的陣列。 比方說,B C 20,40,80。 所以,你有什麼感想 這個命令不會做? 添加的元素。 所以基本上這就是它做什麼。 所以這是非常方便的。 所以,我怎麼樣我做到這一點。 C 是,我們說,6次1到10。 所以,做什麼我想看看 包含的,你覺得呢? 因此,所有六的倍數。 現在,你有什麼感想 如果我這樣做會怎樣呢? 我會讓這一點更為清晰,C,C。 所以會發生什麼,你 想,如果我這樣做? 一加C。 [聽不清] 聽眾:無論是一個錯誤,或者它 只是增加了前三個元素。 CONNER哈里斯:不太。 這就是我們得到的。 會發生什麼事是更短 陣列,一個,得到了循環。 所以,我們得到了124,124,124。 是啊。 基本上,你可以查看 在此之前的行為,加1, 作為此問題,其中一個子類 最短陣列僅僅是數 1,這是一個元件陣列。 我只是說向量所有 的時間,而不是數組, 因為這是第r 文檔通常不會。 這是一個根深蒂固的Ç習慣。 好了,所以現在我們有這個數組。 因此,我們有這個數組,C。 我們可以總結 對C,總結C統計數據。 這是很好的。 所以,現在讓我們做一些矩陣的事情。 比方說,m是一個矩陣。 讓我們使它成為一個三乘三一。 這樣的nrows等於3,以及NCOLS等於3。 而對於數據讓我們do--等什麼 你覺得這是要幹什麼? 對,這是下一個。 這是nrow和ncolumn。 所以我做了什麼是我 宣布三乘三矩陣 我已經通過了一個九元素的數組。 因此,所有的對數 元素從1到9。 而所有這些數值填寫 了array--遺憾? 聽眾:這些都是基地10日誌? CONNER哈里斯:不,日誌 自然對數,所以e為底。 是的,如果你想基地 10日誌,我認為你必須 記錄什麼,通過日誌10分。 並在[聽不清]只是這樣的數據 填滿陣列,所以從上到下, 然後從左向右。 如果你想要做一些其他的 陣列,假設n是矩陣。 讓我們這樣做,我不知道,2至13。 或者,我會做一些更有趣。 我會做2〜4。 nrow等於,讓我們說,3。 NCOL等於4。 ñ。 因此,我們已經得到了這一點。 現在,如果我們要乘這些, 我們將盡百分之n次個百分點, 因為這是ñ。 我們有矩陣產品。 通過他們的方式,你怎麼看 當我宣布n,則2〜4 矢量得到循環,直至 它填補了所有的n? 如果你失戀了 特徵值分解, 這是我們可以很容易做到。 我們可以做的本徵ñ。 所以這是我們第一次 遇到的列表。 所以本徵,n是具有兩個鍵的列表。 值,這是這個數組這裡。 和載體,這是本數組這裡。 所以,如果你想提取, 比方說,這第三列 從特徵向量矩陣,因為 本徵矢量是列向量。 因此,我們可以做的VEC徵ñ美元符號 的[聽不清]載體,逗號3。 VEC。 是這樣的,正如您所料。 然後說了n次百分比次VEC。 因此,結果在這裡肯定看起來像 如果我們把第三個特徵值這裡, 其對應於 第三個特徵向量。 它只是乘以一切 這個特徵向量,組件明智的, 由特徵值。 而這正是我們所期望的, 因為這是特徵值。 有沒有人在這裡不 採取線性代數? 一對夫婦的人,OK。 只要把你的大腦關閉了一點。 事實上,如果我們把本徵ñ 美元符號值的3倍VEC, 也得到同樣的事情。 它以不同的格式作為行 向量,而不是一個列向量, 但什麼大不了的。 所以,這些基本上都是不錯 的事情,我們可以用矩陣做, 展示列表。 我應該表現出了不錯的 關於功能的事情為好。 因此,讓我們say-- [聽不清] 功能,姑且稱之為 它FUNC對功能N N squared-- 實際上,這不是真正的最好的。 A,B,A方和B。 因此,一件事 功能,再次是他們 並不需要顯式的return語句。 所以,你可以just--的 評估的最後一條語句 將返回的說法, 或返回的值。 因此,在這種情況下,我們只評估 一個語句,一個平方與b。 這將是默認的返回值。 它絕不會傷害到放 明確的返回值, 特別是如果你正在處理一個 很複雜的邏輯功能 流。 但你並不需要它們。 所以,現在我們能做的FUNC 5,1,和 基本上這是你所期望的東西。 別的東西,我們可以做的, 我們其實可以做FUNC b 等於1,a等於5。 因此,如果我們在這裡指定號碼, 其論點是哪個說法 在功能上,我們可以前後翻頁 這些價值的地方,我們想要的。 聽眾:是否有什麼原因 寫出來用B 相當於以只用反對 數字和逗號? CONNER哈里斯:是的,通常 做到這一點,如果你有功能 有不少爭論。 這可能經常是這樣 標誌,你只希望 要在極少數情況下使用。 而這種方式,您可以only--你 可以參考特定參數 要使用 非默認值, 而你沒有寫出來 一串標誌等於以後他們是假的。 或者,我可以寫一遍這個 像B A默認值等於2。 然後我可以做˚FFUNC, 我會做4,1這個時候。 和17,這是4平方 加1,如您所料。 但是,我也可以只 把這種用FUNC 4, 我會得到18,因為 我不指定灣 所以B得到的2的默認值。 好了,現在如果你 隨著演示下, 在您的命令鍵入此行 提示,看看會發生什麼吧。 其實,不這樣做。 鍵入這一點。 你應該得到這樣的事情。 所以mtcars是一個內置的數據 這個演示設置 目的自帶with--自帶 在默認情況下你ř分佈。 這是從統計的彙編 1974年發行的汽車趨勢雜誌 對一些不同的車型。 因此,有英里每加侖,cylinders-- 我算了一下DISP is--馬力。 大概。 如果你只是谷歌MT車, 再一個第一的成績 將會從 官方R文件 它會解釋 所有這些數據字段。 所以重量is--重量為 重車萬噸。 Q秒的四分之一英里的時間。 所以,現在我們可以做一些有趣的事情 關於MT車是一個數據字段。 因此,我們可以做的事情 像行名,山車。 這是所有行的列表中的 數據集它們是汽車的名稱。 我們可以做colnames山汽車這一點。 如果你這樣做噸車, 子數值指標,如2。 我們得到了第二列出 此,這將是圓柱體。 聽眾:你做了什麼? CONNER哈里斯:我打 噸車,支架E, 這給了我第二 柱而出噸的汽車。 或者,如果我們希望有一個排,我可以輸入 mtcars逗號2中,例如。 其他2輪逗號,這樣。 這去你行。 這這裡只是給你一個 列,但列的向量。 我才意識到我現在 忘了展示 關於向量一些很酷的東西 您可以與指數做。 因此,讓我做,現在。 因此,讓我們可做C gets--把 本上pause-- 2次1至10。 所以C是只是要 矢量2至20。 我可以把元素像這樣,C2。 我可以通過一個載體 這樣,C--讓我 使用不同的名稱比C一樣,VEC℃。 基本上,我在做什麼 這讓你沒有得到 C的差別混淆為 載體建設中的作用, 以及c作為變量名。 VEC括號中的C 4,5,7。 這將讓我離開的第四,第五, 和該陣列的七個要素。 我所能做的VEC,放在一個負 指數一樣,負4。 這將讓我離開這與 第四個元素除去。 然後,如果我想要做切片, 我可以通過6做VEC 2。 2結腸6只是另一個 載體,它是2,3,4,5,6。 吐出來了。 所以無論如何,回山車。 因此,讓我們做一些回歸。 比方說,模型gets--我們 線性regress--我不知道。 首先,讓我們不要附加當然mtcars。 所以[聽不清] LM模型,讓我們回歸 每加侖英里波浪重量。 然後數據幀mtcars。 所以總結模型。 好了,這看起來有點複雜。 但基本上,看到如果我們 試圖表達英里每加侖 作為重量的線性函數, 那麼,我們在這裡得到了這條線, 其攔截在37.28。 37.28。將理論英里 每加侖汽油的汽車,重為零。 然後每增加噸, 你敲約為每加侖5英里 關閉的這一點。 這兩個係數的你 可以看到,標準誤差存在。 而且他們都非常 統計學顯著。 因此,我們可以非常肯定 1 E-10的負10。 因此,1次東西的負 10,如果你犯了一個更重的車了, 它會每加侖差英里。 或者,我們可以測試一些其他的模式。 像代替 重量回歸這一點, 讓我們回歸它記錄的重量, 因為也許有效重量 里程數在某種程度上不是線性的。 這給了我們平方的0.7528的河 因此,讓我們試試這個。 這一次,讓我們做一個 不同的變量了。 Model2的。 所以綜上所述,模型2。 好吧,讓我們再次 這裡有我們的最佳擬合線。 而這個時間 - 這是說, 基本上,你每次 增加的重量 車用電子的一個因素 你失去了這麼多英里每加侖。 所以,這一次我們的剩餘標準 錯誤它 - 那沒關係,真的。 剩餘標準誤差為 基本上只是標準錯誤 你離開後, 帶走的趨勢線。 而我們的R平方在這裡為0.81, 這是比好一點什麼 我們以前,0.52。 所以,現在讓我們來添加一個 長期以這種回歸。 因此,讓我們回歸英里每加侖 既對權數的日誌 並且,讓我們做,Q英里, 四分之一英里的時間。 OK,它必須有the--沒事,QseC的。 QseC的。 Actually--對不起,什麼? 我把這個東西 否則,除了模型2。 讓我把這個model3。 所以,現在我們可以做的總結model3。 等再次,這基本上 你所期望的東西。 你有積極的攔截。 有效增加 重量為負。 和有效 增加四分之一英里的時間 是積極的,但儘管 比不上重量。 現在直觀,可以使感 此說想想跑車。 有一個非常快的加速, 在很短的四分之一英里的時間。 他們也將使用更多的天然氣, 而更明智的車會 有較慢的加速, 高四分之一英里倍, 並使用少氣,,所以 更高的英里每加侖。 大。 所以現在是時候 劇情是這樣的。 因此,讓我們do--所以裸 骨子裡,我們可以做plots-- 因為我已經貼有該數據幀 before--我們可以做的地塊,重量英里。 使這個有點大了。 在那裡,我們基本上有一個 散點圖,不過分 是一種難以對這個看。 我不記得隨便什麼 語法是不斷變化的情節。 所以我想這將是 一個很好的時間來培養, 有一個非常好的內置的幫助 功能,幫助引號函數名。 我們將調出基本 任何你想。 我想我會真正做到這一點 類型等於P代表點圖。 這是否能改變什麼? 不,不是真的。 好吧。 出於某種原因,當我這樣做 在我自己的電腦前一陣子, 所有的散點 為更清晰。 總之,是散那種看得見? 還有一個人也沒有。 有幾個在那裡,有幾個。 那種你可以看到他們,對不對? 所以,如果我們想增加一個最佳擬合線 這個情節在這裡,這是一個有點裸露 bones--讓我有點漂亮。 主要等於與重量。 英里每加侖。 同樣,你可以看到如何有用的 可選的參數在這裡也有 不必把事情一 一定的順序與鍵盤參數 當你有陰謀的,因為 這些都需要大量的爭論。 Xlab等於體重,體重,噸。 好吧。 好了,是啊,這個裝置 正在有點煩。 但是,你可以看到那種在那裡, 還有一個側面的圖形標題。 在這裡there's--底部 這裡有軸標籤。 我不記得隨便 什麼命令ars-- 的功能是什麼,以增加 這些標籤和標題的大小, 但他們在那裡。 所以,如果我們要 添加最佳擬合線, 我們可以做一些like--我 有語法寫在這裡。 所以請記住,我們只需要添加模型 是MPG,體重,mtcars。 所以,如果我想添加一個最合適 行,我可以做的A,B線模型。 只聽轟的一聲,我們有一個最佳擬合線。 這是一種很難再見到。 我很遺憾的 技術困難。 但它運行基本 左上角到右下角。 而如果規模分別為 做大,你可以看到 該攔截是你能 從匯總統計發現 如果鍵入匯總的模式。 好了,我希望每個人都得到 東西的感覺是什麼 R是,它是很好的。 你可以做遠遠更好地塊比 這對你自己的時間,如果你喜歡。 因此,外國功能界面。 這東西是不是典型 涵蓋入門講座 或介紹任何東西河 這是不太可能你會需要它。 然而,我發現它有用 我自己的項目中來。 而且也沒有好 教程聯機。 所以我只是要 急於大家通過這個 然後你可以自由地離開。 這樣一來,外國 功能界面是什麼 你可以用它來調用出來看看 與R.內部功能, R被建立在C.的r算術只是 C'S 64位浮點運算, 這是double類型[聽不清]。 你可能想要做的 本作一堆的理由。 為1,R被解釋,這是 不編譯成機器代碼。 所以,你可以重寫你的 在C中,然後拿到內部循環 使用R.像的優勢 它更方便比C位 它擁有更好的圖形 設施和諸如此類的東西。 並同時仍然能夠獲得 最高速度出了內循環, 這是你真正需要它。 重用現有的C庫, 這一點也很重要。 如果你有一些C庫一樣, 我不知道,傅立葉變換, 或者一些非常宙 統計過程中使用 在高能天體物理 什麼的,我不知道。 高能天體物理 更是連想,我想。 但是你可以做具有​​的,而不是 把它們寫土生土長的R氣口。 而就the--又一遍,就像如果你 看在大多數討論R的默認庫, 在內部,的內部是 要使用外部函數 接口非常廣泛。 他們會喜歡的東西傅立葉 轉換或計算的相關性 係數C語言編寫的,他們將 只是他們於R包裝。 該接口是一個 有點困難。我想 其難度被誇大了 很多你會發現說明。 但無論如何,這是一個有點混亂。 而且我一直沒能 找到一個很好的教程吧, 所以這是它現在。 同樣,這全段 更供日後參考。 不要擔心複製 一切現在油價下滑。 所以,下面的說明 對於類Unix系統, Linux的,BSD,OS X的我不知道 如何在Windows上運行, 但是請大家不要做你的 在Windows上最後的項目。 你真的不想要。 Unix的要好得多集 最多的休閒節目。 所以,基本上外國 功能界面。 如果你想要寫一個C 功能有R使用, 它必須採取一切 參數作為指針。 所以對於單個值,這 意味著它指向的值。 對於數組,這是一個指針 到第一元件,其 是數組名實際上的意思。 再次,這是你應該有 漂亮的完全下來後p將五位。 數組名只是指針 到第一元件, 浮點型為雙。 而你的函數必須返回void。 唯一的辦法,它可以 居然讓R發生了什麼 是通過修改是R,得到存儲器 它通過外部函數 接口。 所以我寫了這個 例如這裡,這是 一個函數,計算使用 點積的兩個向量。 它有兩個參數,VEC 1,VEC2, 它們是載體本身 和則n,這是一個 長度,因為再次, R已經建成[聽不清]查找 向量的長度,但C沒有。 在C語言中,載體是任意 內存分隔塊。 所以,這樣你就可以 計算點積 只是設置了這一點參數 零,然後遍歷 從1星N,因為 N為一個指針的長度, 只是添加了一些 這一點參數。 它可以是很好的做法 如果你打算怎麼辦 這種寫兩個單獨的C函數。 其中一人has--其中一人剛 採用的參數和類型 他們通常會在C. 因此,它需要一個數組 參數作為指針。 但是,像N個單值參數, 它只是需要的值通過複製, 沒有指針。 然後它不 [聽不清]出指針。 然後你就可以有 一個不同的,基本上, 包裝的功能,基本上 處理要求 外國功能 接口讓您。 你把這種在研發的方式是,一旦 你有你的函數用C寫的, 你型R CMD SHLIB,R 命令共享庫, FOO點C,或任何 你的文件名是, 和OS殼不是在R端子。 這將創建一個 庫叫做foo點左右。 然後你就可以在加載 我們的腳本或交互 使用命令DYN點負載。 然後有一個函數 在研發所謂的C點。 這需要參數是 在C中的功能的第一名稱 要調用。 然後將所有的參數 該功能, 他們必須按正確的順序。 您必須使用這些類型 轉換函數整數,如 雙,人品,並作為合乎邏輯的。 然後,當它返回 列表,這又只是 的關聯數組 參數名稱和值 後功能運行。 所以在這種情況下,因為點刺有 參數VEC 1,VEC2,和int N,N-出來。 為C點,我們有網點督促, 的函數的名稱 我們呼籲,VEC 1,VEC2,類型要挾。 任一向量的長度, 我只是選擇了VEC1隨意。 這將是更穩健的S個 整數最小長度VEC 1,全長VEC2。 然後,就像雙零, 因為我們真的不 關心進入 輸出參數,因為我們是 將它設置為反正零。 然後結果將是一個 基本上大的關聯數組 VEC 1是什麼,VEC2是什麼。 但我們感興趣的 出來,所以我們可以得到這一點。 這又是一個非常玩具的例子 外國功能界面。 但是,如果你要計算點 在循環中大量載體的產品, 或者如果你需要做的 別的東西在循環中, 你不希望依賴於R, 裡面確實有一些開銷 內置到它,這可能是有用的。 再次,這通常不是 一個介紹主題為R. 這不是很好的記錄。 我只是包括它,因為 我發現它在過去是有用的。 因此,不良做法。 我提到,有一個 for循環中的功能。 ,一般情況下不應在 的語言,而不是使用它。 基於R如何實現迭代 在內部,也可以是緩慢的。 他們也只是看起來很醜陋。 ř處理向量非常漂亮,所以 通常情況下,你並不需要使用它。 然後,你通常可以 更換載體通常 這些功能被稱為高 為了功能,地圖,減少, 查找,或過濾器。 我只是給一些 對這些例子做。 地圖是一個高階函數,因為 它需要一個函數作為參數。 所以,你可以給它一個功能, 你可以給它一個數組, 和它將應用功能 到所述陣列的每一個元素 並返回新的數組。 減少,基本上你給 一個數組,你給它 一個函數有兩個參數。 它將首先,應用功能 第一個參數與一些啟動值。 然後,以該結果,在第二位。 然後在第三這一結果, 然後,以該結果在第四。 然後返回當它到達終點。 因此,舉例來說,如果你想 計算所有元素的總和 在一個陣列,可能比你撥打減少 與[聽不清]減小除 功能,如FUNC A,B,返回a與b。 然後啟動值0。 而這一切,你可以找到他們 在R文檔中所述, 在任何一本教科書 函數式編程。 還有這個類的 函數調用的應用功能, 我don't--他們 有點難以解釋, 但如果你看看在[聽不清] 預訂的,我引用開頭, 他解釋說他們頗能 他附錄R上編程。 更多關於的做法, 追加到載體。 是嗎? 我想我應該糾正。 在該第一行中,vec的箭頭, 那箭不應該存在。 您可以分配到一個載體, 再次,通過採取它的長度加1 和分配一些值來表示。 這將延長載體,或者你 可以做VEC等於C,VEC newvalue中。 同樣,如果你​​用C與 一個參數作為一個載體, 所產生的層次被夷為平地。 所以,你只得到一個向量 多數民眾贊成延長1。 從來沒有做到這一點。 你之所以 不應該這樣做,這是這一點。 當您分配一個載體,它 給它的存儲器某個組塊。 如果增加了矢量大小, 它具有重新分配矢量 別的地方。 等再分配是相當昂貴的。 我不會去到如何的詳細信息 內存分配器實現 在操作系統級, 但它需要大量的時間 找到新的內存塊。 而且,如果你 重新分配很多很多 逐漸增大 塊,你最終 有一種叫 內存碎片, 其中可用的存儲器是 分成許多小的塊 在內存分配器的觀點。 而且它越來越難 尋找記憶其他東西。 所以,相反,如果你需要這樣做, 你需要從一端長出矢量 到下一個,追加,而不是將其 不斷,你應預先分配它。 VEC箭頭,向量長度 等於1000,或什麼的。 然後你可以只分配 為載體的其中一個值 你一旦分配後一段時間。 我碰到了這一點,再次,我的暑假作業 當我在寫NRA差 方程求解。 不是象徵性的數字。 我們的想法是,一​​旦你有 一個值的解決方案, 你用它來計算下一個。 所以,我自然天真 傾向是說行, 所以我將開始與一個載體 這是一個很大的價值。 從下一個值計算 那去到我的解向量, 並追加了。 創建別的東西,追加了。 它進行得非常,非常緩慢。 一旦我意識到了這一點 我改變了我的系統 從附加到這個矢量 像10,000至100,000倍, 只是預先分配一個矢量 而剛剛與運行。 我得到了超過1000倍的速度上升。 因此,這是一個非常普遍的 陷阱的R編程。 如果你需要建立一個向量 一塊一塊,預分配它。 另一種常見的up--此行是我最後一次 幻燈片,不要worry--是錯誤處理。 R,坦率地說,不 真正做到這一點非常好。 有很多的 問題可能突然出現。 例如,如果你得到一個數組 或矢量出一個功能的 那你期待一個 價值從何而來,反之亦然, 你傳遞到一個函數, 你寫了期待一個值, 這可能是一個問題。 某些功能 因為這樣做返回null,也就是說, 從閱讀 不存在的鍵在列表中。 但null不是像C 如果您嘗試閱讀的地方 從舊的指針,[聽不清] 以NULL指針,它只是賽格故障 如果你在調試器它 告訴你到底你在哪裡。 相反,空將do--功能 會做不可預知的事情 如果他們兩手空。 如果你交到最大空一樣, 它會給你負無窮大。 所以,是的。 所以這事 我曾經當我有 換了一堆領域 在我的表結構 曾經在其他地方沒有改變他們 當我讀他們。 然後我得到了各種隨機的 無邊結果突然出現 我不知道他們來自何處。 不幸的是,有 沒有REAL R嚴格模式 在那裡,如果是你可以說 看起來似乎是一個錯誤, 只是停在那裡,所以我可以 紀律和解決這個問題。 然而,也有一些是 所謂停止,如果不。 這相當於C中的斷言, 如果你已經談到了這一點。 我不認為C斷言 為演講題目, 但你的部門領導 可能已經過去。 而且,如果停止基本上沒有採取任何 謂語,所以任何聲明 可以是真或假。 如果這是假的,停止其計劃。 它會告訴你什麼行,你 是在什麼條件下失敗。 這非常有用,例如, 完整性檢查,功能的輸入。 所以,如果你有一個函數 你期望的,也就是說, 如果你應該給我一個日期,我想 日期是長度為1的只是一個載體 與地方1到31之間。 如果沒有的話,我知道 有什麼地方出了問題。 而我選擇在此之前停在那裡 有隨機敲代碼為影響 這是很難跟踪到通過。 所以這是一個可能的 使用停機,如果不。 總之,確定。 所以這是結束。 非常感謝你的光臨。 我是一個業餘級在此。 很抱歉,如果你覺得無聊或 困惑或你有什麼。 我很高興地採取通過電子郵件提問 在connorharris@college.harvard.edu。 這正好也給大家 看著這活或更高版本。 另外,雖然我不 一個TF,我也很 願意作為一個非官方的 顧問的人誰是 使用R在作為最後的項目。 如果你想的是, 那麼就談談你的TF 然後給我寫一封電子郵件,讓 我知道你的工作內容 所以我可以設置會議 與你時間,如果你想。 所以,再一次,非常感謝你。 我希望你喜歡它。 聽眾:[聽不清]。 當然:CONNER哈里斯。 聽眾:什麼樣的項目 將一個CS的學生用R進行? CONNER哈里斯:所以,如果你不這樣做 東西是純粹的數據挖掘, 例如,有 很多事情 你可以做與數據 挖掘和機器學習。 你可能想用R表示 的東西的組分。 我長大了,原來,這個例子 如果你正在寫一個網站 並且要運行自動化 你的服務器的統計分析 在一定的時間每天日誌, 這可能是東西是 很容易做到的只是簡單 - [R腳本,可以安排 每晚運行,例如。 我敢肯定,如果 有什麼理由你 要統計或繪圖功能 而有這種自動運行,而不是 具有互動 事情在Excel中, 例如,這件事情 你可能想用R進行。 所以在我任何問題離開? 沒有? 好了,好了,再次感謝 您的光臨。