看懂错误信息是第一步
很多人一看到R控制台跳出红字就慌了,其实大可不必。R的报错信息虽然有时候啰嗦,但多数情况下都指出了问题所在。比如出现 Error in read.csv("data.csv") : cannot open the connection,基本就是文件路径不对或者文件不存在。这时候别急着删代码,先检查下文件名是不是写错了,或者文件有没有放在工作目录里。
可以用 getwd() 看当前工作目录,用 list.files() 查看目录下有哪些文件。一个小技巧:把文件拖到控制台,R会自动打出完整路径,省得手动输错。
常见的几类错误和应对方法
1. 对象找不到:Object not found
写代码时手快,变量名拼错了,比如把 my_data 写成 my_dat,运行时就会报错。这种情况仔细核对变量名就行。如果是在函数里用的变量,注意是不是作用域的问题——函数内部访问不了外面的变量,除非传进去了。
2. 缺失包:package is not installed
想用 ggplot2 画图,结果运行 library(ggplot2) 时报错说包没安装。那就补一句安装命令:
install.packages("ggplot2")
library(ggplot2)注意大小写,R是区分大小写的。另外,公司或学校电脑有时网络受限,装包失败可以试试换镜像源,加个 repos 参数:
install.packages("ggplot2", repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/")3. 数据类型不匹配
比如你拿一个字符型向量去算均值,mean(c("a", "b", "c")),R就会告诉你 argument is not numeric or logical。这时候就得回头看看数据是不是读错了,CSV里本来是数字的列变成字符了,可能是分隔符没设对,或者有乱码。
用 str(my_data) 快速查看数据结构,发现某列明明是年龄却显示 chr,那就要在读取时处理,比如:
read.csv("data.csv", stringsAsFactors = FALSE)调试小技巧
不是所有错误都有明确提示。遇到卡住的情况,可以在关键位置打印中间结果:
print(head(my_data))
print(class(my_var))或者用 browser() 函数插入断点。运行到那一行会自动进入调试模式,一步步走,看哪一步出问题。
还有一个实用函数 traceback(),报错后立刻输入它,能看到函数调用链,定位具体出错位置。
求助也有讲究
实在搞不定,去论坛或群里问,别只贴一句“我的代码报错了”。要把错误信息完整贴出来,最好还能给出能复现问题的最小代码示例。别人一看就知道怎么回事,也愿意帮你。
比如你读文件出错,不要说“读不了”,而是说:
操作系统:Windows 10
R版本:4.2.1
代码:read.csv("data.csv")
错误信息:cannot open the connection
当前目录:getwd() 输出结果
信息给全了,别人一眼就能看出是不是路径斜杠方向错了,或者权限问题。