2016-11-28 100 views
-2

我有幾個大的R對象保存爲.RData文件:「this.RData」,「that.RData」,「andTheOther.RData」等。我沒有足夠的內存,所以我想在循環中加載每個內存,抽取一些行並將其卸載。然而,一旦我加載(i),我需要去掉(i)中的「.RData」部分,然後才能對對象「this」,「that」,「andOther」做任何事情。我想做與How to iterate over file names in a R script?中描述的相反的內容我該怎麼做? Thx如何在R循環中修改我?

編輯:我省略了文件不在工作目錄中,並有一個文件路徑。我遇到了Getting filename without extension in R和file_path_sans_ext取出了擴展名,但路徑的其餘部分仍然存在。

+0

你可以用'gsub' –

+0

你能詳細說一下嗎? FWIW,新手在這裏... – armipunk

+0

你要替換一部分字符串。這就是gsub的用途。你可以用'gsub(「。RData」,「」,i)'來替換你不需要的部分。查看'?gsub'獲取更多示例。 –

回答

0

你的意思是這樣的嗎?

i <- c("/path/to/this.RDat", "/another/path/to/that.RDat") 
f <- gsub(".*/([^/]+)", "\\1", i) 
f1 <- gsub("\\.RDat", "", f) 
f1 
[1] "this" "that" 

在Windows的路徑,你必須使用"\\"代替"/"

編輯:解釋。從技術上講,這些被稱爲「常規 表達式」(正則表達式),而不是「模式」。

  • .任何字符

  • .*任意數量的任何類型的字符

    的(包括0)
  • .*/任何種類的字符的任意數目,接着是 /

  • [^/]任何字符但不是/

  • [^/]+任何種類的字符, 的任意數量(1或多個),但是不/

  • ()圍基。您可以使用時 更換爲\\1組,\\2

所以,尋找任何樣的性格,其次是/,其次是 任何東西,但沒有路徑分隔符。將其替換爲「任何東西 但不是分隔符」。

對於正則表達式,有很多很好的教程,只是尋找它。

+0

謝謝。我不會假裝完全理解_,* /([^ /] +)「,」\\ 1「_中的每個元素在做什麼,但我可以看到整體是」模式匹配「多種模式,使用一系列的通配符 – armipunk

+0

感謝您的解釋編輯,簡單的英語幫助我深刻理解,比讓我徹底困惑的gsub更易於理解 – armipunk

+0

Pl在我的原始問題中看到我的註釋,我發現你的編輯解釋令人難以置信有用,但[此](http://stackoverflow.com/questions/15073753/regex-return-file-name-remove-path-and-file-extension)更多...預消化! – armipunk

0

一個簡單的方法是使用base::basename()從文件路徑中提取基本名稱,然後使用tools::file_path_sans_ext()刪除文件擴展名。

paths_to_files <- c("./path/to/this.RData", "./another/path/to/that.RData") 

tools::file_path_sans_ext(
    basename(
    paths_to_files 
) 
) 

## Returns: 
## [1] "this" "that" 
+0

這是有用的。我可以避免額外的rm(Objs)從現在的清理中清除: '_rdatafiles < - paste0(「/ Volumes/Data/RData_files/y」,2004:2009,「.RData」) Objs < - paste0(「y」,2004:2009)_' 仍然不清楚爲什麼downvotes ... – armipunk