gpt4 book ai didi

r - 在R中将目录路径作为参数传递

转载 作者:行者123 更新时间:2023-12-04 11:09:31 25 4
gpt4 key购买 nike

我在 R 中有一个简单的函数,它通过 lapply() 在我指定的一个目录中的许多 CSV 上运行 summary()。功能如下图所示:

#   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)

我收到错误:

文件错误(文件,“rt”):无法打开连接。另外: 警告信息:
在文件(文件,“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 不能以这种方式处理参数吗?有什么我完全想念的吗?我试过四处搜索并且熟悉其他编程语言,所以坦率地说,我现在陷入困境感到有点愚蠢/失败。

最佳答案

你路过 fl[1]直接到 read.csv与合格的路径。相反,如果您使用 full.names=TRUE您将获得完整路径和您的 read.csv步骤将正常工作。但是,您必须做一些小 Action 才能制作 if再次声明函数。

您也可以扩展您的 lapply将目录和文件名粘贴在一起的函数:

fdl <- lapply(fl, function(x) read.csv(paste(dir, x, sep='\\')))

或者在单独的行中创建此粘贴的完整路径:
fl.qualified <- paste(dir, fl, sep='\\')
fdl <- lapply(fl.qualified, read.csv)

当你做 paste步骤,如果你想真正明确,我会鼓励 regex确保没有人传递带有斜杠的目录:
fl.qualified <- paste(gsub('\\\\$', '', dir), f1, sep='\')

或类似的规定。

关于r - 在R中将目录路径作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14508305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com