2016-06-11 17 views
0

我對R相對比較陌生,並且在文件提取方面苦苦掙扎。 我在我的目錄xyz中有一個CSV文件列表(即001.csv,002.csv,....),並且需要根據用戶給出的輸入提取特定文件。 用戶輸入的形式是1,2 ...(存儲在y),我試圖通過前導0進行轉換。R - 如何根據用戶輸入從目錄中提取文件

當我運行代碼

filename = as.character(formatC(y, width=3, flag=0)) 

list.files(directory,pattern = "^",filename,"\\.csv$") 

我得到的結果

character[0] 

,這意味着我的模式代碼是不正確的,我想對於如文件:001.csv要提取

有人可以幫我嗎?

+1

嘗試'files < - list.files(directory,pattern = paste0(「^」,filename,「。* \\。csv $」))'' –

回答

0

看起來你錯過了匹配任何以filename開頭的文件,然後可以匹配任何0+字符並以.csv結尾的模式。

構建它,使用paste0

files <- list.files(directory, pattern = paste0("^", filename, ".*\\.csv$")) 

其中:

  • "^" - 你通過
  • ".*\\.csv$"文件名 - - 文件名字符串
  • filename開始任何0 +字符(.*)後跟.csv\\.csv)在字符串的末尾($)。
0

filename = as.character(formatC(y, width=3, flag=0))

formatC標誌0似乎只對數字對象的工作;如果你閱讀用戶輸入y與e。 G。 y = readline(),y是「字符」類型。你有

filename = formatC(as.integer(y), width=3, flag=0) 

得到想要的格式(無需as.character()因爲formatC()值已經有該類型)。

list.files(directory,pattern = "^",filename,"\\.csv$")

這不是

list.files(path = ".", pattern = NULL, all.files = FALSE, 
      full.names = FALSE, recursive = FALSE, 
      ignore.case = FALSE) 

正確使用 - 當然你的意思來連接"^"filename"\\.csv$"

所有告訴我建議建立與sprintf(),我的整個文件名模式。即:

filename = sprintf("%03d\\.csv", as.integer(y)) 
list.files(directory, filename) 
相關問題