R語言初學(xué)者的一些常見報錯指南_第1頁
R語言初學(xué)者的一些常見報錯指南_第2頁
R語言初學(xué)者的一些常見報錯指南_第3頁
R語言初學(xué)者的一些常見報錯指南_第4頁
R語言初學(xué)者的一些常見報錯指南_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第R語言初學(xué)者的一些常見報錯指南目錄前言第一類:工作路徑問題未設(shè)定工作路徑當前路徑需要修改第二類:對象名或函數(shù)名問題未找到函數(shù)名報錯函數(shù)名大小寫問題未找到賦值對象對象賦值不規(guī)范第三類:符號問題中文逗號報錯絕對路徑的設(shè)定符號使用不規(guī)范缺少括號或引號賦值號報錯必要的引號與括號第四類:中文注釋亂碼第五類:數(shù)據(jù)集或變量長度不同總結(jié)

前言

與Python、C語言等相比,R語言可以說是比較容易的編程語言之一(更適合數(shù)據(jù)探索和科研)。盡管R語言相對簡單,但仍給新手小白們帶來無數(shù)的困難和痛苦。特別是,當你在run一份code,發(fā)現(xiàn)每行code都出現(xiàn)Error,更是無奈。然而,在剛開始學(xué)習(xí)R語言的過程中,這些ERROR又不可避免。對我自己而言,剛開始學(xué)習(xí)R時,也遇到了各式各樣的Error,確實讓人崩潰。這里,我給大家總結(jié)了一些初學(xué)者學(xué)習(xí)代碼時容易踩的坑,以及如何copywith,以Rstudio為例。

第一類:工作路徑問題

未設(shè)定工作路徑

如下:CannotfindXX.csx/txt/xlsx等等,這是新手常見的報錯工作路徑問題。在出現(xiàn)這類報錯時,第一反應(yīng)檢查自己在導(dǎo)入/讀取文件前是否設(shè)置了工作路徑,或者說工作路徑設(shè)定是否正確。具體理解:也就是說,所要讀取或加載的文件必須存在當前設(shè)定的路徑下才允許。其次,如果我們設(shè)定了工作路徑,但是發(fā)現(xiàn)該存在路徑下,并沒有存放所需文件也需要更改工作路徑。例子,有兩種情況需要注意。一是,在讀取文件前沒有設(shè)置工作路徑,解決辦法:補充該工作路徑所在路徑,用setwd()設(shè)置;二是,設(shè)置了工作路徑,但是當前工作路徑不是該文件所在的工作路徑,解決辦法:更改工作路徑,先用getwd()檢查當前的工作路徑,再用setwd()進行修改。

##第一種情況

library(openxlsx)

mydata-read.xlsx("1.xlsx",1)

#報錯信息如下

ErrorinloadWorkbook(file,password=password):Cannotfind1.xlsx

#解決辦法

setwd()#這是設(shè)置所需讀取文件的工作路徑的函數(shù),路徑記得加雙引號或者單引號。

Tips:在讀取前文件前用setwd()來設(shè)置絕對路徑是一種方法,但這樣得保證每次所用數(shù)據(jù)都必須在同一個工作路徑才可以,并且得清楚這個路徑的名稱(這里可以從我的電腦去復(fù)制粘貼路徑),否則都需要改。然而,通常我們的數(shù)據(jù)都是根據(jù)個人情況分別放在不同的文件夾,即工作路徑都不同。因此,每次讀取文件前,我在這里推薦大家用這個方法選擇工作路徑(choosedirectory)以解決上述問題:

當前路徑需要修改

##第二種情況

setwd(XXXX)

mydata-read.xlsx("1.xlsx",1)

#報錯信息與第一種情況一樣

#解決辦法

getwd()#這是檢查當前工作路徑的函數(shù)

setwd()

選擇好后,我們會在console這個界面看到一個路徑,如:I:/作業(yè)就是我們的當前工作路徑。在R里面所有的操作,導(dǎo)入導(dǎo)出文件都會保存在這個路徑下。

第二類:對象名或函數(shù)名問題

未找到函數(shù)名報錯

如下:CouldnotfindfunctionXXX等等,這個報錯是屬于程序包沒有加載的問題。因此,在使用某個函數(shù)時,首先要清楚知道該函數(shù)屬于哪個程序包里的,并先用library()讀取該程序包,然后再運行該函數(shù)即可。

mydata-read.xlsx("1.xlsx",1)

##報錯信息如下

Errorinread.xlsx("1.xlsx",1):couldnotfindfunction"read.xlsx"

###解決辦法

library(openxlsx)

mydata-read.xlsx("1.xlsx",1)mydata-read.xlsx("1.xlsx",1)

如果不清楚該函數(shù)是哪個程序包,我們可以用read.xlsx或help(xx)來咨詢,咨詢結(jié)果如下:紅色框即為所需要的程序包,需要注意的是在咨詢的時候必要時需加上引號。

函數(shù)名大小寫問題

我們在調(diào)用程序R包、函數(shù)名時,要注意一個小問題字母的大小寫。這里,我直接用例子給大家展示:head()、Head()以及HEAD()這里只有第一個函數(shù)名是能夠正常運行的,因為在R語言中只存在自帶函數(shù)名的字母大小寫,也就是說,程序中不會默認都是大寫或者都是小寫。

##R語言程序包大小寫錯誤

library(Openxlsx)

##報錯信息如下

Errorinlibrary("Openxlsx"):thereisnopackagecalled‘Openxlsx'

##更正后

library("openxlsx")

##函數(shù)名大小寫錯誤

mydata-Read.xlsx("I:\\Rlanguage\\R語言鄭師兄代碼\\圖一.xlsx",2)

##報錯信息如下

ErrorinRead.xlsx("I:\\Rlanguage\\R語言鄭師兄代碼\\圖一.xlsx",2):

couldnotfindfunction"Read.xlsx"

##更正大小寫后

mydata-read.xlsx("I:\\Rlanguage\\R語言鄭師兄代碼\\圖一.xlsx",2)

##另外一個example

Head(mydata)

##報錯信息如下

ErrorinHead(mydata):couldnotfindfunction"Head"

##更正后

head(mydata)

錯誤結(jié)果和更正展示:

未找到賦值對象

如下:objectxxxnotfound,這類報錯比較直觀,就是如錯誤所描述的:找不到目標的問題。在下面例子中,就是報錯信息中的a找不到。通常可能是你自己在運行代碼時候,run的太快了,上一行的數(shù)據(jù)讀取信息還沒讀,就緊接著跑下一行代碼,所以會出現(xiàn)第二行代碼報錯,沒有找到a這個變量。以后出現(xiàn)這類錯誤時,只需要查看一下自己環(huán)境變量是否缺少該目標變量,如果缺少了補充上就可以了。

##這類錯誤檢查環(huán)境變量中是否存在所需目標

library(ggplot2)

library(datasets)

data(package="datasets")##查看該程序包里含有哪些數(shù)據(jù)集

data(iris)

head(iris)

b-a[-1]

##報錯信息如下

Error:object'a'notfound

##解決辦法

##補充目標變量即可

a-data.frame(iris$Species,iris$Sepal.Width)

b-a[-1]

個人建議:在報錯時,先檢查下環(huán)境變量中的變量,是否能找到所需要的目標。如果沒有的話,把目標變量讀取后再運行報錯的代碼即可。

對象賦值不規(guī)范

如下:unexpectedsymbolin1r,這類錯誤也是新手會犯的,但這類錯誤很簡單,我們在定義目標變量的時候,不能用數(shù)字作為定義名。這里我提供一個思路去理解,如果可以用數(shù)字打頭,也需要加上字母:例如1+UUU;1+AALL。然而這些不能作為變量名,因為編譯器不能區(qū)分究竟是數(shù)字還是變量名。利用數(shù)字和字母一起顯然沒有只用字母來的簡便,索性就去掉了。因此,我們需要記住的是,在定義目標變量名稱的時候不能用數(shù)字打頭。

##數(shù)字打頭不能做變量名的錯誤

1r-iris$Species

##報錯信息如下

Error:unexpectedsymbolin"1r"

##解決辦法

##把數(shù)字去掉,只用字母作為變量名

r-iris$Species

第三類:符號問題

中文逗號報錯

如下:unexpectedinputinXXX,這類錯誤是初學(xué)者常遇到的中英文標點符號問題。新手在出現(xiàn)這類報錯時,第一反應(yīng)應(yīng)該查看報錯的位置Errorin停在哪里。在下面例子中,句子停在了Species,之后,通過仔細查看代碼,能夠發(fā)現(xiàn)句子中報錯的位置是一個中文格式的逗號。因此,把中文格式的逗號改成英文格式即可,這種報錯只要在R語言練習(xí)一段時間后就基本不會再煩了。

##這類錯誤需要檢查中英文標點符號

library(ggplot2)

library(datasets)

data(package="datasets")##查看該程序包里含有哪些數(shù)據(jù)集

data(iris)

head(iris)

a-data.frame(iris$Species,iris$Sepal.Width)

##報錯信息如下

Error:unexpectedinputin"a-data.frame(iris$Species,?"

##解決辦法

##將中文的標點符號改成英文模式下的即可

a-data.frame(iris$Species,iris$Sepal.Width)

個人建議:由于rstudio剛開始使用時用的是默認的背景模板,為了在學(xué)習(xí)過程中節(jié)省一些時間,提高代碼的準確率,可以用下面方法更換一下背景模板,選擇一種最適合自己的模板,減少不必要的錯誤。

絕對路徑的設(shè)定符號使用不規(guī)范

如下:unexpectedinputinsetwd(I:,是路徑未設(shè)定成功,但是根本報錯是因為路徑符號不對導(dǎo)致的。我們需要清楚在R語言中引用地址的時候,需要注意是/還是\(單向左還是雙向右下的斜杠)。如果在地址引用時,用了//或就會報錯。下面我們用例子來展示,我們發(fā)現(xiàn)我們在設(shè)置路徑時,符號用錯了,直接報錯。在讀取數(shù)據(jù)時,工作路徑的符號也用錯了,出現(xiàn)了同樣的報錯。這里,我們只需要熟記一點,在R語言中要用/or即可。

##這類報錯也屬于符號使用錯誤

setwd("I:\Rlanguage\R語言鄭師兄代碼")

##報錯信息如下

Error:unexpectedinputin"setwd(I:\"

##解決辦法

##把'\'改成'/'or'\'

setwd("I:\\Rlanguage\\R語言代碼")

setwd("I:/Rlanguage/R語言代碼")

##同樣是工作路徑的情況

library(openxlsx)

mydata-read.xlsx("I:\Rlanguage\R語言代碼\圖一.xlsx",2)

##報錯信息如下

Error:'R'isanunrecognizedescapeincharacterstringstarting""I:\R"

##解決方法與上述相同

mydata-read.xlsx("I:\Rlanguage\R語言代碼\圖一.xlsx",2)

報錯結(jié)果如下:

更正后結(jié)果:

缺少括號或引號

如下:unexpectedsymbolin:XXX,這類報錯是比較常見且簡單的,屬于缺少or多余符號。這類錯誤出現(xiàn)時,應(yīng)該第一時間查看error中出現(xiàn)報錯的位置,出現(xiàn)問題的地方在兩個報錯的兩個雙引號之間,因此應(yīng)該出現(xiàn)在第一行和第二行代碼之間。下面的例子中,我們發(fā)現(xiàn)缺少了括號,因此我們在代碼的最后把括號補充上后,問題就解決了。

##這類報錯屬于多余或缺少符號

library(ggplot2)

library(datasets)

data(package="datasets")##查看該程序包里含有哪些數(shù)據(jù)集

data(iris)

head(iris)

a-data.frame(iris$Species,iris$Sepal.Width)

mydata-iris

mydata-as.data.frame(t(dat[,as.character(a$Species)])#這里看出少了一個括號。

mydata

##報錯信息如下

Error:unexpectedsymbolin:

"mydataas.data.frame(t(dat[,as.character(a$Species)])

mydata"

##解決辦法

##只需要刪除多余和補充缺少的符號即可

個人建議:如果在輸入有括號的代碼時,可以把鼠標在每個右半邊的括號點一下,rstudio會自帶提醒這一組括號是否完成輸入:當前括號表示是第二個左半邊括號,因此需要在最右邊再補充一個括號。

賦值號報錯

通常用這兩種方式來表示賦值,-或者=。如果我們在去讀時候賦值號使用有誤,也會出現(xiàn)objectmydatanotfound。我用一個例子告訴大家,這里不是因為沒有讀取之前的目標,而是在編輯代碼的過程中可能因為粗心等因素出現(xiàn)代碼的小錯誤。具體情況如下:

##這類屬于未找到目標變量,但是屬于代碼錯誤的問題

library(openxlsx)

mydata-read.xlsx("I:\Rlanguage\R語言鄭師兄代碼\圖一.xlsx",2)

##報錯信息如下

Error:object'mydata'notfound

##仔細一看發(fā)現(xiàn)是賦值時候的符號被隔斷了

##解決方法

-改寫成-即可

報錯如下:

更正展示:

必要的引號與括號

我將這兩個易犯的小錯誤合一起與大家分享。第一,忘記使用必要的引號;第二,在使用函數(shù)名時忘記使用括號。其實,這兩類錯誤可能在之前也有提到一點。但是,這里我單獨將他們拿出來講,考慮到這兩類錯誤新手特別容易犯。但是兩類錯誤也是特別容易解決,只要在寫代碼的時候稍微小心一點就可以啦~圖片下面我用一些具體的例子和大家展示:

##特別是安裝程序包時,必要的引號不能丟

install.packages(ggplot2)

##報錯信息如下

Errorininstall.packages:object'ggplot2'notfound

##解決辦法

##所需安裝的程序包加上引號即可

install.packages("ggplot2")

##使用函數(shù)名時需要加括號,例如

##報錯信息如下

function(...)

##解決辦法,在函數(shù)名后添加括號

help()

##此外,需要強調(diào)并不是所有函數(shù)都可以使用空白括號的

特別提醒:并不是所有函數(shù)名都可以用XXX()來查詢,有的函數(shù)名的括號內(nèi)必須加入目標變量才可以訪問。這里舉一個簡單的例子:例如head()

第四類:中文注釋亂碼

注釋的信息顯示亂碼,這是新手常遇到的問題。首先,注釋信息在你每次編輯一條代碼之前、中間以及之后都可以進行。其次,你每次編輯完注釋信息保存時都需要選擇一種encoding,也就是編碼方式。在windows系統(tǒng)下,read.csv()和read.table()方法不指定文件格式時,默認讀取的格式為GBK(GB2312)。Rstudio里面有設(shè)置默認文本編碼方式,但是修改前后讀入中文數(shù)據(jù)情況都一樣,encoding為UTF-8或GB2312都相同。然而,在Linux系統(tǒng)下,系統(tǒng)指定中文編碼方式是UTF-8,所以read.csv()和read.table()都要求UTF-8。如下兩個文件,分別是UTF-8格式和GBK格式,首先用read.csv讀取,可以看到不指定編碼方式時,讀取UTF-8格式文件是亂碼。用encoding指定讀取的文件編碼方式為UTF-8后,正常。這樣看起來read.csv()方法讀取UTF-8好像可行?總結(jié)一下,如果大家看不懂上面這一串沒關(guān)系,在保存文件時選用UTF-8的編碼格式,以及在打開一份code時,如果中文亂碼就用UTF-8打開。無論保存還是打開文件都選擇UTF-8格式即可。

如下情況:

將編碼方式更改為UTF-8:

下面是重新以UTF-8格式打開一份代碼:

filereopenwithencodingutf-8ok

第五類:數(shù)據(jù)集或變量長度不同

如下:xandwmusthavethesamelength,這類錯誤也是較為常見的報錯通常為兩個數(shù)據(jù)框的數(shù)據(jù)行與列長度不同。新手在出現(xiàn)這類報錯時,第一反應(yīng)看你在讀取兩個數(shù)據(jù)框時的數(shù)據(jù)行列數(shù)是否滿足長度對等關(guān)系。我們通過下面例子來講解這個報錯需要注意的問題:我們在做一些需要兩個數(shù)據(jù)集的分析時(例如beta分析,即在探究環(huán)境因子與微生物群落的關(guān)系時的一些距離分析,特別需要注意這個行列對等問題,因為代碼只能識別行列對等的矩陣。這里,我們要記住讀取數(shù)據(jù)時的幾個比較重要的函數(shù),header=T這是個默認的函數(shù),header=T表示第一行設(shè)為每列的列名,這是默認代碼,如果不需要可以將T改為F。s=1表示第一列設(shè)為每行的行名。有這個代碼,意味著會少一列,注意這個函數(shù)在使用時要保證沒有重復(fù)的名稱。

##x和w長度需要一致,即兩個矩陣的行列長度要對等

library(vegan)

library(grid)

env=read.csv("env(1)(1).csv",header=T,sep=",",s=1)#read.csv讀取csv格式的數(shù)據(jù)

env=data.matrix(env)#將數(shù)據(jù)框轉(zhuǎn)化為矩陣

env[is.na(env)]=0#去掉數(shù)據(jù)為0的值

speciesdata=read.csv("OTU(2).csv",header=T,sep=",")

speciesdata=data.matrix(speciesdata)

speciesdata[is.na(speciesdata)]=0

speciesdata=t(speciesdata)

speciesdata.cca=cca(speciesdata,env)#進行CCA分析

##報錯信息如下

Errorinweighted.mean.d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論