如何在R中创建一个新的read.csv,这样它就可以读取.csv文件,而无需输入.csv文件的全名

时间:2013-10-09 07:55:03

标签: r function csv

伙计们,感谢您阅读此内容。如果我提出愚蠢的问题,这是我第一次写一个程序,请原谅我。

我有一堆名为: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。

2 个答案:

答案 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.choosechoose.files功能打开一个对话框,使用鼠标选择文件:read.csv(file.choose())

如果您想要阅读上述所有文件,那么您可以使用lapply以及sprintflist.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])