1

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

我有一堆 .csv 文件,名称如下:001-XXX.csv;002-XXX.csv...150-XXX.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 显示错误:“}”中的意外'}' 出了什么问题?看起来合乎逻辑。

我在 Windows 8 上运行 Rstudio。

4

2 回答 2

1

as.character(id)不会id变成字符串。将其更改为:

id = as.character(id)

编辑:根据评论,您应该使用字符参数调用,并且和newread()之间没有区别。newread(001)newread(1)

于 2013-10-09T08:21:07.540 回答
0

这不是对您的问题的具体答案(其他人已经讨论过),而是一些可能有助于以不同方式完成任务的建议。

首先,一些用于 R 的 GUI 具有文件名完成功能。您可以键入第一部分:read.csv("001-然后按一个键或组合键(在 Windows GUI 中按 TAB),文件名的其余部分将为您填写(只要它是唯一的)。

您可以使用file.choosechoose.files功能打开一个对话框以使用鼠标选择您的文件:read.csv(file.choose()).

lapply如果您想阅读所有上述文件,那么您可以使用and 或sprintfor 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])
于 2013-10-09T16:25:20.070 回答