欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

R語言初學(xué)者的一些常見報(bào)錯(cuò)指南

 更新時(shí)間:2022年08月23日 11:39:06   作者:酷二的R語言記錄冊  
在使用R的時(shí)候,偶爾也會遇到一些糟心的報(bào)錯(cuò),本文把運(yùn)行過程中遇到的一些報(bào)錯(cuò)和解決方案進(jìn)行總結(jié)歸納,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下

前言

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

第一類:工作路徑問題

未設(shè)定工作路徑

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

## 第一種情況
library(openxlsx)
mydata <- read.xlsx("1.xlsx",1)
#報(bào)錯(cuò)信息如下
Error in loadWorkbook(file, password = password) : Cannot find 1.xlsx
#解決辦法
setwd ( ) #這是設(shè)置所需讀取文件的工作路徑的函數(shù), 路徑記得加雙引號或者單引號。

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

當(dāng)前路徑需要修改

## 第二種情況
setwd (XXXX)
mydata <- read.xlsx("1.xlsx",1)
#報(bào)錯(cuò)信息與第一種情況一樣
#解決辦法
getwd ( ) #這是檢查當(dāng)前工作路徑的函數(shù)
setwd ( )

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

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

未找到函數(shù)名報(bào)錯(cuò)

如下:Could not find function "XXX"等等,這個(gè)報(bào)錯(cuò)是屬于程序包沒有加載的問題。因此,在使用某個(gè)函數(shù)時(shí),首先要清楚知道該函數(shù)屬于哪個(gè)程序包里的,并先用library()讀取該程序包,然后再運(yùn)行該函數(shù)即可。

mydata <- read.xlsx("1.xlsx",1)
## 報(bào)錯(cuò)信息如下
Error in read.xlsx("1.xlsx", 1) : could not find function "read.xlsx"
### 解決辦法
library(openxlsx)
mydata <- read.xlsx("1.xlsx",1)mydata <-read.xlsx("1.xlsx",1)

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

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

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

## R語言程序包大小寫錯(cuò)誤
library(Openxlsx)
## 報(bào)錯(cuò)信息如下
Error in library("Openxlsx") : there is no package called ‘Openxlsx'
## 更正后
library("openxlsx")

## 函數(shù)名大小寫錯(cuò)誤
mydata <- Read.xlsx("I:\\R language\\R語言鄭師兄代碼\\圖一.xlsx",2)
## 報(bào)錯(cuò)信息如下
Error in Read.xlsx("I:\\R language\\R語言鄭師兄代碼\\圖一.xlsx", 2) :
  could not find function "Read.xlsx"
## 更正大小寫后
mydata <- read.xlsx("I:\\R language\\R語言鄭師兄代碼\\圖一.xlsx",2)
## 另外一個(gè)example
Head(mydata)
## 報(bào)錯(cuò)信息如下
Error in Head(mydata) : could not find function "Head"
## 更正后
head(mydata)

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

未找到賦值對象

如下:object ‘xxx’ not found,這類報(bào)錯(cuò)比較直觀,就是如錯(cuò)誤所描述的:找不到目標(biāo)的問題。在下面例子中,就是報(bào)錯(cuò)信息中的a找不到。通??赡苁悄阕约涸谶\(yùn)行代碼時(shí)候,run 的太快了,上一行的數(shù)據(jù)讀取信息還沒讀,就緊接著跑下一行代碼,所以會出現(xiàn)第二行代碼報(bào)錯(cuò),沒有找到a這個(gè)變量。以后出現(xiàn)這類錯(cuò)誤時(shí),只需要查看一下自己環(huán)境變量是否缺少該目標(biāo)變量,如果缺少了補(bǔ)充上就可以了。

## 這類錯(cuò)誤檢查環(huán)境變量中是否存在所需目標(biāo)
library(ggplot2)
library(datasets)
data(package="datasets") ## 查看該程序包里含有哪些數(shù)據(jù)集
data(iris)
head(iris)
b <- a[-1]
## 報(bào)錯(cuò)信息如下
Error: object 'a' not found
## 解決辦法
## 補(bǔ)充目標(biāo)變量即可
a <- data.frame(iris$Species,iris$Sepal.Width)
b <- a[-1]

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

對象賦值不規(guī)范

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

## 數(shù)字打頭不能做變量名的錯(cuò)誤
1r <- iris$Species
## 報(bào)錯(cuò)信息如下
Error: unexpected symbol in "1r"
## 解決辦法
## 把數(shù)字去掉,只用字母作為變量名
r <- iris$Species

第三類:符號問題

中文逗號報(bào)錯(cuò)

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

## 這類錯(cuò)誤需要檢查中英文標(biāo)點(diǎn)符號
library(ggplot2)
library(datasets)
data(package="datasets") ## 查看該程序包里含有哪些數(shù)據(jù)集
data (iris)
head (iris)
a <- data.frame(iris$Species ,iris$Sepal.Width)
## 報(bào)錯(cuò)信息如下
Error: unexpected input in "a <- data.frame(iris$Species ,?"
## 解決辦法
## 將中文的標(biāo)點(diǎn)符號改成英文模式下的即可
a <- data.frame(iris$Species, iris$Sepal.Width)

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

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

如下:unexpected input in “setwd(I:”,是路徑未設(shè)定成功,但是根本報(bào)錯(cuò)是因?yàn)槁窂椒柌粚?dǎo)致的。我們需要清楚在R語言中引用地址的時(shí)候,需要注意是’/‘還是’\‘(單向左還是雙向右下的斜杠)。如果在地址引用時(shí),用了’//‘或’‘就會報(bào)錯(cuò)。下面我們用例子來展示,我們發(fā)現(xiàn)我們在設(shè)置路徑時(shí),符號用錯(cuò)了,直接報(bào)錯(cuò)。在讀取數(shù)據(jù)時(shí),工作路徑的符號也用錯(cuò)了,出現(xiàn)了同樣的報(bào)錯(cuò)。這里,我們只需要熟記一點(diǎn),在R語言中要用’/’ or '\'即可。

## 這類報(bào)錯(cuò)也屬于符號使用錯(cuò)誤
setwd("I:\R language\R語言鄭師兄代碼")
## 報(bào)錯(cuò)信息如下
Error: unexpected input in "setwd(I:\"
## 解決辦法
## 把'\'改成 '/' or '\\'
setwd("I:\\R language\\R語言代碼")
setwd("I:/R language/R語言代碼")

## 同樣是工作路徑的情況
library(openxlsx)
mydata <- read.xlsx("I:\R language\R語言代碼\圖一.xlsx",2)
## 報(bào)錯(cuò)信息如下
Error: '\R' is an unrecognized escape in character string starting ""I:\R" 
## 解決方法 與上述相同
mydata <- read.xlsx("I:\\R language\\R語言代碼\\圖一.xlsx",2)

報(bào)錯(cuò)結(jié)果如下:

更正后結(jié)果:

缺少括號或引號

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

## 這類報(bào)錯(cuò)屬于多余或缺少符號
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)]) # 這里看出少了一個(gè)括號。
mydata
## 報(bào)錯(cuò)信息如下
Error: unexpected symbol in: 
"mydata < as.data.frame(t(dat[,as.character(a$Species)])
mydata"
## 解決辦法
## 只需要刪除多余和補(bǔ)充缺少的符號即可

個(gè)人建議:如果在輸入有括號的代碼時(shí),可以把鼠標(biāo)在每個(gè)右半邊的括號點(diǎn)一下,rstudio會自帶提醒這一組括號是否完成輸入:當(dāng)前括號表示是第二個(gè)左半邊括號,因此需要在最右邊再補(bǔ)充一個(gè)括號。

賦值號報(bào)錯(cuò)

通常用這兩種方式來表示賦值,<- 或者 =。如果我們在去讀時(shí)候賦值號使用有誤,也會出現(xiàn)object ‘mydata’ not found。我用一個(gè)例子告訴大家,這里不是因?yàn)闆]有讀取之前的目標(biāo),而是在編輯代碼的過程中可能因?yàn)榇中牡纫蛩爻霈F(xiàn)代碼的小錯(cuò)誤。具體情況如下:

## 這類屬于未找到目標(biāo)變量,但是屬于代碼錯(cuò)誤的問題
library(openxlsx)
mydata < - read.xlsx("I:\\R language\\R語言鄭師兄代碼\\圖一.xlsx",2)
## 報(bào)錯(cuò)信息如下
Error: object 'mydata' not found
## 仔細(xì)一看發(fā)現(xiàn)是賦值時(shí)候的符號被隔斷了
## 解決方法
< - 改寫成 <-即可

報(bào)錯(cuò)如下

更正展示:

必要的引號與括號

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

## 特別是安裝程序包時(shí),必要的引號不能丟
install.packages(ggplot2)
## 報(bào)錯(cuò)信息如下
Error in install.packages : object 'ggplot2' not found
## 解決辦法
## 所需安裝的程序包加上引號即可
install.packages("ggplot2")

## 使用函數(shù)名時(shí)需要加括號,例如
help
## 報(bào)錯(cuò)信息如下
function (...)
## 解決辦法,在函數(shù)名后添加括號
help()
## 此外,需要強(qiáng)調(diào)并不是所有函數(shù)都可以使用空白括號的

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

第四類:中文注釋亂碼

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

如下情況


將編碼方式更改為UTF-8

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

file—reopen with encoding—utf-8—ok

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

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

## x和w長度需要一致,即兩個(gè)矩陣的行列長度要對等
library(vegan)
library(grid)
env=read.csv("env(1)(1).csv", header=T, sep=",", row.names = 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) #進(jìn)行CCA分析
## 報(bào)錯(cuò)信息如下
Error in weighted.mean.default(newX[, i], ...) :
  'x' and 'w' must have the same length
## 解決辦法
## 由于是兩個(gè)數(shù)據(jù)框的長度不同,那么只要將兩個(gè)數(shù)據(jù)框?qū)R即可
speciesdata=read.csv("OTU(2).csv",header=T, sep=",") ## 在這行代碼添加 row.names=1
speciesdata=read.csv("OTU(2).csv",header=T, sep=",",row.names=1)# 讓430列變成429列 與第一矩陣長度相等

錯(cuò)誤結(jié)果

更正展示

個(gè)人建議:這類報(bào)錯(cuò)–兩個(gè)數(shù)據(jù)框/矩陣行列不對等時(shí),我們在每讀取一個(gè)文件時(shí)應(yīng)該先看看環(huán)境中的數(shù)據(jù)框,可以用鼠標(biāo)點(diǎn)開數(shù)據(jù)框,看看數(shù)據(jù)框讀取的結(jié)果與自己預(yù)期的結(jié)果以及在正常excel下打開的是否一致,再去判斷在運(yùn)行代碼時(shí)能否成功等等。

補(bǔ)充:有一些錯(cuò)誤是R的初學(xué)者和經(jīng)驗(yàn)豐富的R程序員都可能常犯的。

如果程序出錯(cuò)了,請檢查一下幾個(gè)方面。

  • 使用了錯(cuò)誤的大小寫。help(),Help() 和 HELP() 是三個(gè)不同的函數(shù)(只有第一個(gè)是正確的)。
  • 忘記使用必要的引號。install.packages("gclus") 能夠正常執(zhí)行,然后Install.packages(gclus)將會報(bào)錯(cuò)。
  • 在函數(shù)調(diào)用時(shí)忘記使用括號。例如,要使用help()而非help。即使函數(shù)無需參數(shù),仍需加上()。
  • 在Windows上,路徑名中使用了\。R將反斜杠視為一個(gè)轉(zhuǎn)義字符。setwd("c:\mydata")會報(bào)錯(cuò)。正確的寫法是setwd("c:/mydata")或setwd("c:\\mydata")。
  • 使用了一個(gè)尚未載入包中的函數(shù)。函數(shù)order.cluster()包含在包gclus中。如果還沒有載入這個(gè)包就使用它,將會報(bào)錯(cuò)。

R的報(bào)錯(cuò)信息可能是含義模糊的,但如果謹(jǐn)慎遵守了以上要點(diǎn),就應(yīng)該可以避免許多錯(cuò)誤。

總結(jié)

到此這篇關(guān)于R語言初學(xué)者的一些常見報(bào)錯(cuò)指南的文章就介紹到這了,更多相關(guān)R語言常見報(bào)錯(cuò)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論