伙计们,感谢您阅读此内容。如果我提出愚蠢的问题,这是我第一次写一个程序,请原谅我。
我有一堆名为:001-XXX.csv; 002-XXX.csv ... 150-XXX.csv的.csv文件。这里XXX是一个很长的名称标签。所以每次我需要输入read.csv(“001-xxx.csv”)时都会有点烦人。我想创建一个名为“newread”的函数,它只询问前三个数字,真实的id号,来读取.csv文件。我认为“newread”应该是这样的:
newread <- function(id){
as.character(id)
a <- paste(id,"-XXX.csv",sep="")
read.csv(a)
}
BUt R显示错误:意外'}'in“}”出了什么问题?看起来合乎逻辑。
我在Windows 8上运行Rstudio。
答案 0 :(得分:1)
as.character(id)
不会将id
更改为字符串。将其更改为:
id = as.character(id)
修改:根据评论,您应该使用字符参数调用newread()
,newread(001)
和newread(1)
之间没有区别。
答案 1 :(得分:0)
这不是您问题的具体答案(其他人已经介绍过),而是一些可能有助于以不同方式完成任务的建议。
首先,R的一些GUI有文件名完成。您可以键入第一部分:read.csv("001-
,然后点击一个键或一组键(在Windows GUI中按TAB键),其余的文件名将为您填写(只要它是唯一的)
您可以使用file.choose
或choose.files
功能打开一个对话框,使用鼠标选择文件:read.csv(file.choose())
。
如果您想要阅读上述所有文件,那么您可以使用lapply
以及sprintf
或list.files
(或其他)一步完成此操作:
mycsvlist <- lapply( 1:150, function(x) read.csv( sprintf("%03d-XXX.csv", x) ) )
或
mvcsvlist <- lapply( list.files(pattern="\\.csv$"), read.csv )
您还可以使用list.files
获取与模式匹配的所有文件的列表,然后将其中一个返回的值传递给read.csv
:
tmp <- list.files(pattern="001.*csv$")
read.csv(tmp[1])