如何解决R脚本运行时的'invalid description argument'错误?
解决R脚本source时的"invalid 'description' argument"错误
问题重现
执行source("C:/Users/JNunl/OneDrive/Desktop/DASCRIPT.R")时返回报错:
Error in file(file, "rt") : invalid 'description' argument
已完成以下操作仍未解决:
- 启动R Studio并创建与脚本目录一致的新项目
- 确认安装所有依赖库
- 反复核对路径无误
- 尝试导入数据集后运行代码
移除文件名后缀后脚本可运行,但后续流程报错。
可能原因与解决方案
1. 脚本文件访问问题
- 确认文件可用性:手动打开
C:/Users/JNunl/OneDrive/Desktop/DASCRIPT.R,检查文件是否损坏、无乱码。若文件存储在OneDrive,右键选择「始终在此设备上保留」,避免在线文件无法被R读取。 - 规避路径输入错误:在RStudio的「Files」面板中找到该脚本,点击右上角的「Source」按钮直接运行,跳过手动输入路径的步骤。
2. 脚本内工作目录设置错误
脚本中setwd("~/~")是无效路径(~代表用户主目录,~/~指向主目录下不存在的~文件夹),会导致后续读取csv、xlsx文件失败,甚至触发source时的路径异常:
- 删除该行代码(RStudio项目已自动设置工作目录),或替换为实际路径:
setwd("C:/Users/JNunl/OneDrive/Desktop")
3. 后续流程报错的补充修复
当source成功后,若仍有报错,可按以下步骤排查:
- 确认csv文件存在:执行
list.files(pattern="csv"),检查返回结果是否为有效文件名,若为空则调整pattern参数或确认csv文件在工作目录内。 - 指定Excel文件完整路径:将
read_excel("stn.xlsx")替换为完整路径,避免文件找不到:stns = read_excel("C:/Users/JNunl/OneDrive/Desktop/stn.xlsx") - 处理日期格式问题:
month(as.Date(a$Sdt))依赖a$Sdt为标准日期格式,若转换失败会生成NA,可指定日期格式参数(需根据实际数据格式调整):a$Mn = month(as.Date(a$Sdt, format = "%Y-%m-%d"))
原脚本代码
library(seacarb) library(readxl) library(lubridate) setwd("~/~") myf=list.files(pattern="csv") para=c("YEAR", "MONTH", "STATION_ID", "STN_DEPTH_M", "LATITUDE", "LONGITUDE","SAMPLING_DATE","SAMPLE_DEPTH_M","DEPTH_CODE", "MEDIUM", "SAMPLE_ID", "VALUE_1", "VALUE_2", "VALUE_3") result=NULL for(i in 1: length(myf)){ out=read.csv(myf[i], header=T)[para] result=rbind(result, out) } colnames(result)=c("Yr","Mn", "Stn","Std","Lat","Lon","Sdt","Spd","Dc", "Med", "SID", "Alk", "pH", "T") a=subset(result, Med =="surface water") a$Alk=as.numeric(a$Alk) a$pH=as.numeric(a$pH) a$T=as.numeric(a$T) a$Mn=month(as.Date(a$Sdt)) a=subset(a, Alk>50 & Alk<125) a=subset(a, !is.na(Alk) & !is.na(pH) & !is.na(T)) b=carb(flag=8, var1=a$pH, var2=a$Alk/50000, T=a$T, S=0.2, P=1, Pt=0.3e-9, Sit =10e-6, k1k2="r", pHscale ="F") a$DIC=b$DIC*12000 a$pCO2=b$pCO2 stns=read_excel("stn.xlsx") bsn<-function(x) if(nrow(subset(stns, STATION==x))>0) subset(stns, STATION==x)$BASIN else NA lon<-function(x) if(nrow(subset(stns, STATION==x))>0) mean(subset(stns, STATION==x)$LONGITUDE) else NA lat<-function(x) if(nrow(subset(stns, STATION==x))>0) mean(subset(stns, STATION==x)$LATITUDE) else NA a$Basin=unlist(mapply(bsn, a$Stn), use.names=F) a$Lat=unlist(mapply(lat, a$Stn), use.names=F) a$Lon=unlist(mapply(lon, a$Stn), use.names=F)
内容的提问来源于stack exchange,提问作者JTBBears
相关产品推荐
相关产品推荐

