我有一个简单的R函数,它通过lapply()来运行summary(),处理我指定目录下的许多CSV文件。该函数如下所示:
# id -- the file name (i.e. 001.csv) so ID == 001.
# directory -- location of the CSV files (not my working directory)
# summarize -- boolean val if summary of the CSV to be output to console.
getMonitor <- function(id, dir, summarize = FALSE)
{
fl <- list.files(dir, pattern = "*.csv", full.names = FALSE)
fdl <- lapply(fl, read.csv)
dataSummary <- lapply(fdl, summary)
if(summarize == TRUE)
{ dataSummary[[id]] }
}
当我尝试指定目录并将其作为参数传递给函数时,如下所示:
dir <- "C:\\Users\\ST\\My Documents\\R\\specdata"
funcVar <- getMonitor("001", dir, FALSE)
我收到了以下错误:
文件(file, "rt")中的错误: 无法打开连接。 另外:警告信息: 在文件(file, "rt")中:无法打开文件 '001.csv':没有那个文件或目录
但是,当我单独运行下面的代码时:
fl <- list.files("C:\\Users\\ST\\My Documents\\R\\specdata",
pattern = "*.csv",
full.names = FALSE)
fl[1]
它找到了我指向的目录,fl [1] 正确输出了 [1] "001.csv",这是列出的第一个文件。
我的问题是,在尝试将此路径变量作为参数传递给我的函数时,我做错了什么。 R 无法以这种方式处理参数吗?我是否完全忽略了什么?我尝试过搜索并熟悉其他编程语言,所以说实话,我感到有点愚蠢/失败,因为现在被卡住了。
browser()
语句,并检查fl
的内容。 - Paul Hiemstralist.files
的pattern
参数并不是你想要的。正确的模式应该是'\\.csv$'
。现在你所拥有的模式意味着“匹配零个或多个空字符,后跟任何字符和字母 csv”,这将匹配远不止以.csv
结尾的文件。当使用Sys.glob
时,这种模式就是你想要的。例如,你可以执行Sys.glob(file.path(dir, '*.csv'))
。 - Matthew Plourder
相关问题并且搜索"getmonitor",你会发现在过去的一周里有五个相同的问题! - rrs