我在R中有一個簡單的函數,它通過lapply()在我指定的目錄中的許多CSV上運行summary()。功能如下所示:在R中傳遞目錄路徑作爲參數
# 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不能以這種方式處理參數嗎?有什麼我只是完全失蹤?我嘗試過四處搜尋,並熟悉其他編程語言,所以坦率地說,我現在感覺有點愚蠢/失敗了。
在讀取csv文件之前放置一個'browser()'語句,並檢查'fl'的內容。 –
你提供給'list.files''pattern'參數的東西不是你想象的那樣。正確的模式將是''\\。csv $''。你現在所說的「匹配零個或多個空字符,後跟任何字符和字母csv」,這將比僅以'.csv'結尾的文件更多地匹配。在這種模式下,你認爲這是'Sys.glob'的意思。例如,你可以執行'Sys.glob(file.path(dir,'* .csv'))''。 –
爲什麼這個問題一遍又一遍地出現?如果您搜索「r」問題和「getmonitor」,您會在上週發現五個問題! – rrs