日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

R语言怎么写积分_R语言入门的基本操作(1)

發布時間:2023/12/8 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 R语言怎么写积分_R语言入门的基本操作(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,這是從知乎《一個大學生的日常筆記》中遷移過來的R語言教程的第一篇。

這一份筆記follow了兩本非常優秀的R語言教材,分別是Robert I.Kabacoff的《R語言實戰》和Peter Dalgaard的《R語言統計入門》,兩本教材的思路有所不同,我會根據我自己的思路盡量降低學習門檻,綜合來寫教程。(畢竟提高了門檻,我就不知道自己在寫什么了……那就真的沒卵用了……)

閱讀教程的時候我有自己的思路,看過我的LaTeX入門筆記的同學們會明白,如果我想到了一些可能會讓入門新手迷糊的地方,我會以注意:這樣的形式去標記出來,而且有的時候,可能這些小插曲更加重要,請不要忽略它們。

例子大部分都是摘抄的,但是我會做一些解釋和細節上的調整,同時考慮到代碼規范的問題,我很多例子不會提供符號可選的余地,比如"和',用于標記字符都可以,但是代碼規范推薦使用"

目前我已經是準大二學生,統計的先修課只有一門學校上的《概率論與數理統計》,事實上,這門課學完之后,R的大部分內容就已經可以上手操作了。因此我們不會在這門課程已有的理論部分下功夫去解釋。但是,礙于我自己本科生的視野,我們不會把太復雜,或者根本不可能涉及到的的內容搬到這里,因此這對于真正的statistician,或者是統計學專業的大牛來說,可能最多只是一份入門筆記而已。

不過也還是有些亮點的,我可能會在教程里夾雜點別的語言的新奇玩意做些互相的對比2333

引言到此為止,下面我們開始正題。

目錄

  • R語言環境初探
  • 一些基本的素養和操作
    • 賦值
    • 向量
    • 索引
    • 矩陣
    • 數組
  • 小結

R語言環境初探

細心的同學可能已經看到了封面的那個圖,那個就是我們推薦下載的R語言編輯器——Rstudio,但是這僅僅是個編輯器,必須下載安裝真正的R語言編譯器才能夠運行。至于如何下載——百度搜索R和Rstudio關鍵字就好。那兩個玩意的圖標大概長這樣

我們主要使用的編輯器是Rstudio,但是為了教程的完整性(integrity),這里展示一張R語言的打開界面

輸入一行命令試試?

plot(rnorm(1000))

(居然沒提供R語言的選項……)

系統會為你畫一張圖

這是一張含有1000個按正態分布排列的隨機數的圖。

R的環境到此結束,下面我們回到Rstudio來看看

我們可以看到Rstduio有四個區域。分別的功能是

  • 左上角,是Rstudio的腳本區域(但是遠不止寫腳本那么簡單,其實還可以用來寫Rmarkdown,RNotebook等,這些是很實用的插件,但這里我們不詳談)
  • 左下角,是命令行(command)窗口,剛才我們在R中展示的窗口就是這個。
  • 右上角是R的目前的變量環境
  • 右下角是R的畫圖,裝包,瀏覽文件的區域。
  • 可以看出,綜合的功能是比R要強大很多的,而且根據我們網站組的大佬的反應,這玩意其實是一個html……也就是說你會JS你就可以惡搞它的界面啦

    對了,在你關掉R/Rstudio的時候,系統會問你是否要保存空間映像,那個其實就是保存歷史記錄,方便以后繼續使用而設置的。

    一些基本的素養和操作

    R語言是一個統計語言。統計數據離不開一個良好的用于儲存的結構和標識。我們會先從它的基本操作講起,在其中夾雜著數據類型,數據框等大量的結構和細節。

    首先說說幫助文檔

    R語言和C++/python不一樣,R語言非常瑣碎,因此seek for help是必要的,但是R的official document很難懂,因此不推薦拿那個去當作你學習的教程。我們推薦的是以下三種尋求幫助的命令

    help("function") or ?functionhelp.search("function") or ??functionexample("function")

    第一個是查函數的幫助文檔,第二個是以某一個function為關鍵字搜索幫助文檔。第三個會給出某一個函數的使用示例。在對函數不熟悉的時候一定要學會使用它。

    不管是什么樣的計算機語言,賦值都是最基礎的工作。但是賦值符號不是C++里的=,而是比如

    r

    注意:用=賦值是不會被編譯器報錯的,但是由于這個語法不標準,所以有的時候會出問題。

    隨著賦值而來的就是數值運算,但是我們不強調那種單變元的數值運算,R有個很強大的功能是向量化操作(當然matlab也有)。(向量理解為一系列變量的按序組合(比如數值向量可以理解為數列)就好)比如說給予五個人身高體重的例子,我們計算一個BMI。

    A

    最后顯示的結果是

    確實是一個向量。

    注意:R語言構造向量的方法是c(...)

    注意:如果不輸入某一個變量的名稱,R默認是不顯示結果的,因此我最后一行又加了一個BMI變量名顯示它。

    注意:我們推薦寫多行R代碼的時候使用腳本,之后在Rstudio中,腳本區域的右上角有三個按鈕,第一個run是逐行運行代碼,第三個source是運行全部代碼(但是要在下拉框選擇source with echo,否則依然顯示不了結果),大家注意回去找找看。

    注意:如果你真的點擊了source去運行代碼的話,可以在command區域看到這樣的命令

    source('C:/Users/Asus/Desktop/A.R')

    拿出來說的原因是想強調:如果你要輸入一個文件路徑,一定要輸入正斜杠/,因為反斜杠是轉義字符(escaped character),在""中間輸入字符,如果想讓它打印出",就可以輸入"。

    我們回到向量這個問題上來

    常用的R的數據類型有三種:數字,字符,邏輯真假(當然還有個缺失值類型,我們在之后會說)。因此我們也可以創建字符和邏輯向量。

    關于字符向量,我們列舉下面三個例子

    c("A","B","C")cat(c("A","B","C"))cat(c("A","B","C"),'')

    顯示的結果如下

    哎?二和三有什么區別嗎?

    如果你在R中運行的話,第二行的命令是默認不換行的,所以就會出現

    的情況,不過在Rstudio里,這種情況得到了改善。

    注意:cat是連接+輸出的函數,而c只負責連接,在例子中,cat可以消除字符串的""符號。你可以連接任何東西,包括向量。

    注意:R的向量要求內部的所有元素數據類型相同。如果通過cat/c連接兩個不同數據類型的向量,系統會進行強制轉換。比如

    A

    結果留給大家自己觀察。(這里原來出了一處錯誤,已經修正,謝謝

    @快走姑娘

    提醒)

    和數值運算類比的就是邏輯運算,但是我不打算在這里先說這些。

    伴隨著向量的就是索引,目的自然是為了取用這些元素。索引的方法是[],舉2個例子

    A

    顯示的結果如下

    注意:向量內的元素是有序的,這里A[2]索引的就是第二個,不是程序員認為的第三個

    注意:第二個例子中,我們相當于人工設置了索引(在python里,有個專門的數據結構叫字典(dict))為"A","B","C",它們叫這些變量的名稱(name),一一對應1,2,3。和自然索引1,2,3不同的是,這里的人工索引在查看變量的時候會顯示

    注意:索引也可以索引一個向量,也就是索引多個元素(和matlab一樣),比如說,試著運行一下下面這個命令。

    A

    結果留給你們自己去發現。

    注意:索引也可以是負索引!它不是python里“倒數第幾個”的含義,它的意思是“索引除標記以外的所有元素”。在數據清洗中非常常見,可以用一個例子去幫助理解

    A

    自己去敲敲代碼看看結果吧

    注意:你甚至可以使用索引進行賦值,即使它已經超出了這個向量的長度,比如說

    A[7]="D"

    那么,A這個時候第7個確實是字符D,但是原來的第4-6個呢?實際上它們是缺失值。也就是NA。至于缺失值是什么樣的數據類型,這會在之后提到。

    注意:對于名稱,字符串中的""要求會放寬,也就是說,你還可以這么寫。

    B

    結果是一樣的

    對于我這種懶人來說,這可真是個福音。

    下面我們說說矩陣和數組

    矩陣可以理解為二維的向量。但是創建矩陣的參數就一下子多了很多,因此可能會稍有點難理解,我們用兩組例子結束這一切。

    第一組:

    S

    顯示的結果如下

    我改變的參數在byrow這里,它提示我們應該按行填充還是按列填充。TRUE自然就是按行存儲的意思。

    Oh,第三個報錯了,看一下報錯信息。

    data length [9] is not a sub-multiple or multiple of the number of rows [2]數據長度9不是行數2的因數或倍數

    哇哦,我有一些額外的發現

    報錯信息的數字會用[]標識出來,是有意義的。同時本身也不是特別難懂。

    興奮完之后,回到命令本身,參數解釋如下:

    • 第一個是源向量。
    • 第二個是nrow和ncol參數,row是行,col是列(column),代表需要組合的行數和列數。
    • 第三個是byrow參數,上面已經解釋過了。
    • 第四個是dimnames,用于標記行名稱和列名稱。

    我們可以看到,在矩陣里,名稱就非常重要了,它更接近于我們平常做數據分析時所需要使用的表。

    注意:看到那個TRUE了沒,對比一下C里的true和python里的True就知道,R語言也是一個大小寫敏感的語言。因此要注意代碼的嚴格的大小寫。

    注意:第三,四個參數不是必需的,第三個不寫的話,默認是FALSE,也就是按列填充。(和TeX的語法差別在于,可選不可選并不能通過直觀的方式看出來,需要靠人的主觀能動性去理解)

    注意:在dimnames里有一個list函數,這是為了創建列表,它的目的是把多個變量的集合聚合成為單個變量,這是為了方便給函數的參數提供值,傳參時會經常用。形式上倒沒有太大的差別。

    下面是第二個例子。

    cbind(A=1:4,B=5:8,C=9:12)rbind(A=1:4,B=5:8,C=9:12)

    顯示的結果如下

    bind是捆綁的意思,cbind理解為“把列捆綁在一起”,所以提供的向量自然是列向量,那么對應的名稱索引就是行索引。同樣的,rbind就是“把行捆綁在一起”。

    注意:有的人會問[1,]和[,1]是什么?我們要強調,這種位置上的東西不管是名稱還是數字,都是索引!但是這是矩陣的索引,對于矩陣的索引,我們可以舉幾個例子。

    A=matrix(1:24,nrow=4,ncol=6)A[,6]A[3,]A[3,4]B=A[c(2,3),c(3,4)]Bdimnames(B)=list(c(1,2),c(1,2))B

    顯示的結果如下

    索引項中,第一個是行索引,第二個是列索引。同樣,你也可以給索引設置為向量。

    在敲這個代碼的時候,摸索了一個很有趣的用法。我們注意到,B依然是一個矩陣,但是使用matrix是創建一個矩陣,如果我要修改B這個矩陣的參數怎么辦呢?就可以使用paramater(B)=,其中paramater是在函數中的參數,可以通過這種方法賦值。

    注意:1:4,5:8等等,這個是什么?根據例子可以看出,這會生成1:4的公差為1的等差數列。你不用去擔心看不懂,我會點出來,然后告訴你,這些有趣的用法在之后的筆記中會講解到。

    接著說數組,R中給的定義是多于2維的向量。我們拿矩陣去做對比,對數組就很好理解了。

    同樣舉個例子

    A

    顯示的結果如下

    我們可以看出,第三維是單獨被拉出來的,第一二維就是行和列。第三維我們一般稱為

    有了矩陣鋪墊,這個每個參數的含義就好理解多了,但我們還是做一個簡單的解釋。

  • 第一個paramater是源向量。
  • 第二個是三維中每一維的長度
  • 第三個是每一維的名稱
  • 注意:我還沒有找到讓數組元素按行填充的辦法。可能本身就沒有設置吧。

    注意:在介紹matrix函數的時候,每一個參數都是paramater=...的形式,但是這里似乎不是。在R里,如果不加這樣的形式,R會按默認的參數順序設置,如果記不住就很容易亂。使用這樣的形式可以防止這個問題(同樣在python,C++里也可以這么做,其中python里叫已知參數)當然不是因為它沒有paramater,這只是寫的人的習慣,因為這三個參數不容易混(性質完全不同),所以用熟的人自然不會再想著加paramater本身。

    好的,問題來了,如果我是小白呢?我想加paramater怎么辦?

    乖,讓你的心到最開始的地方看看

    小結

    再次強調,不要忽略所有注意的地方!我已經寫了很長時間了,但是實際上回到書本,其實只是書本一二兩章的內容的部分。還有很多有趣的東西還沒有涉及到,因此這只是基本操作總覽的第一部分。我們會在之后的筆記涉及到剩下的部分。

    下一節我們會說函數,常用函數集合,向量中的因子,排序,數據框,存儲與導入外部數據等其余的基本操作。

    感謝支持我的各位!筆芯~~

    總結

    以上是生活随笔為你收集整理的R语言怎么写积分_R语言入门的基本操作(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。