【问题标题】:How to create a new read.csv in R so it can read .csv file without typing the full name of .csv file如何在 R 中创建一个新的 read.csv 以便它可以读取 .csv 文件而无需输入 .csv 文件的全名
【发布时间】:2013-10-09 07:55:02
【问题描述】:

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

我有一堆 .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。

【问题讨论】:

  • 你可能会感兴趣:stackoverflow.com/a/5359647/1412059
  • 谢谢@Roland!但是,我的代码有什么问题?我搜索了几个小时,但不知道为什么。
  • 该错误表明括号不匹配,但由于我在您的代码中没有看到任何内容,因此我认为您没有显示某些内容。
  • 重新发布评论,因为它已被删除并带有答案:您需要将id 作为字符传递,例如newread("001"),或者使用sprintf,如果您想遵循这条路。
  • @Roland 原来 Rstudio 正在将代码执行到光标所在的行。由于我不知道这一点并将光标放在最后一个大括号之前,Rstudio 无法执行完整的代码...

标签: r function csv


【解决方案1】:

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

id = as.character(id)

编辑:根据cmets,你应该用字符参数调用newread()newread(001)newread(1)没有区别。

【讨论】:

  • 那无济于事。他们需要将id 作为字符传递,例如newread("001"),或使用sprintf
【解决方案2】:

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

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

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

如果您想读入上述所有文件,则可以使用lapplysprintflist.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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2016-06-14
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多