[英]Passing directory path as parameter in R
我在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
帶有限定路徑的read.csv
。 相反,如果你使用full.names=TRUE
你將得到完整的路徑,你的read.csv
步驟將正常工作。 但是,你必須做一點努力再次使你的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='\')
或類似的規定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.