【R分享|提示】 新手踩过的坑,你踩过几个?(下)

“ 熟能生巧帮助你避免不必要的错误”   --科白君
编辑 : 科白维尼。
原创微文,欢迎各位转发转载。

我来咯,与大家分享一下剩余的常见报错。Let’s go~

8)注释的信息显示乱码,这是新手常遇到的问题。首先,注释信息在你每次编辑一条代码之前、中间以及之后都可以进行。其次,你每次编辑完注释信息保存时都需要选择一种encoding,也就是编码方式。在windows系统下,read.csv ( )和read.table ( )方法不指定文件格式时,默认读取的格式为GBK(GB2312)。Rstudio里面有设置默认文本编码方式,但是修改前后读入中文数据情况都一样,encoding为UTF-8或GB2312都相同。然而,在Linux系统下,系统指定中文编码方式是UTF-8,所以read.csv ( )和read.table ( )都要求UTF-8。如下两个文件,分别是UTF-8格式和GBK格式,首先用read.csv读取,可以看到不指定编码方式时,读取UTF-8格式文件是乱码。用encoding指定读取的文件编码方式为UTF-8后,正常。这样看起来read.csv ( )方法读取UTF-8好像可行?总结一下,如果大家看不懂上面这一串没关系,在保存文件时选用UTF-8的编码格式,以及在打开一份code时,如果中文乱码就用UTF-8打开。无论保存还是打开文件都选择UTF-8格式即可。
通过下面例子来学习:
将编码方式更改为UTF-8:

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

9)object 'mydata' not found,这个报错是之前讲过的问题--没有找到目标变量。但是,我用一个例子告诉大家,这里不是因为没有读取之前的目标,而是在编辑代码的过程中可能因为粗心等因素出现代码的小错误。具体情况如下:

## 这类属于未找到目标变量,但是属于代码错误的问题
library("xlsxjars")
library("rJava")
library("xlsx")
library(openxlsx)
mydata < - read.xlsx("I:\\R language\\R语言郑师兄代码\\图一.xlsx",2)
## 报错信息如下
Error: object 'mydata' not found
## 仔细一看发现是赋值时候的符号被隔断了
## 解决方法
< - 改写成 <-即可

报错结果:

更正展示:

10) 'x' and 'w' must have the same length, 这类错误也是较为常见的报错--通常为两个数据框的数据行与列长度不同新手在出现这类报错时,第一反应看你在读取两个数据框时的数据行列数是否满足长度对等关系。我们通过下面例子来讲解这个报错需要注意的问题:我们在做一些需要两个数据集的分析时(例如beta分析,即在探究环境因子与微生物群落的关系时的一些距离分析,特别需要注意这个行列对等问题,因为代码只能识别行列对等的矩阵。这里,我们要记住读取数据时的几个比较重要的函数,header=T 这是个默认的函数,header=T 表示第一行设为每列的列名,这是默认代码,如果不需要可以将T改为F。row.names=1表示第一列设为每行的行名。有这个代码,意味着会少一列,注意这个函数在使用时要保证没有重复的名称。

## x和w长度需要一致,即两个矩阵的行列长度要对等
library(vegan)
library(grid)
env=read.csv("env(1)(1).csv", header=T, sep=",", row.names = 1) # read.csv读取csv格式的数据
env=data.matrix(env) # 将数据框转化为矩阵
env[is.na(env)]=0 # 去掉数据为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分析
## 报错信息如下
Error in weighted.mean.default(newX[, i], ...) :
  'x' and 'w' must have the same length
## 解决办法
## 由于是两个数据框的长度不同,那么只要将两个数据框对齐即可
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列 与第一矩阵长度相等

错误结果:

更正展示:

个人建议:这类报错--两个数据框/矩阵行列不对等时,我们在每读取一个文件时应该先看看环境中的数据框,可以用鼠标点开数据框,看看数据框读取的结果与自己预期的结果以及在正常excel下打开的是否一致,再去判断在运行代码时能否成功等等。

11)我们在调用程序R包、函数名时,要注意一个小问题--字母的大小写。这里,我直接用例子给大家展示:head ( )、Head ( )以及HEAD ( )这里只有第一个函数名是能够正常运行的,因为在R语言中只存在自带函数名的字母大小写,也就是说,程序中不会默认都是大写或者都是小写

## R语言程序包大小写错误
library("xlsxjars")
library("rJava")
library("xlsx")
library("Openxlsx")
## 报错信息如下
Error in library("Openxlsx") : there is no package called 'Openxlsx’
## 更正后
library("openxlsx")

## 函数名大小写错误
mydata <- Read.xlsx("I:\\R language\\R语言郑师兄代码\\图一.xlsx",2)
## 报错信息如下
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)
## 另外一个example
Head(mydata)
## 报错信息如下
Error in Head(mydata) : could not find function "Head"
## 更正后
head(mydata)

错误结果和更正展示:

12)最后,我将这两个易犯的小错误合一起与大家分享。第一,忘记使用必要的引号;第二,在使用函数名时忘记使用括号。其实,这两类错误可能在之前也有提到一点。但是,这里我单独将他们拿出来讲,考虑到这两类错误新手特别容易犯。但是两类错误也是特别容易解决,只要在写代码的时候稍微小心一点就可以啦~

下面我用一些具体的例子和大家展示:

## 特别是安装程序包时,必要的引号不能丢
install.packages(ggplot2)
## 报错信息如下
Error in install.packages : object 'ggplot2' not found
## 解决办法
## 所需安装的程序包加上引号即可
install.packages("ggplot2")

## 使用函数名时需要加括号,例如
help
## 报错信息如下
function (...)
## 解决办法,在函数名后添加括号
help()
## 此外,需要强调并不是所有函数都可以使用空白括号的

特别提醒:并不是所有函数名都可以用 XXX ( )来查询,有的函数名的括号内必须加入目标变量才可以访问。这里举一个简单的例子:例如head ( )

期待您的"分享"点赞"在看"

(0)

相关推荐