如何在 R 循环中修改 i?

How to modify i in an R loop?

我有几个大型 R 对象保存为 .RData 文件:"this.RData"、"that.RData"、"andTheOther.RData" 等等。我没有足够的内存,所以我想在一个循环中加载每个,提取一些行,然后卸载它。但是,一旦我加载 (i),我需要先删除 (i) 的“.RData”部分,然后才能对对象 "this"、"that"、"andTheOther" 执行任何操作。我想做与 How to iterate over file names in a R script? 中描述的相反的事情,我该怎么做?感谢

编辑:我没有提及这些文件不在工作目录中并且也有文件路径。我遇到了 并且 file_path_sans_ext 取出了扩展名,但路径的其余部分仍然存在。

你的意思是这样的吗?

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

在 windows' 路径上,您必须使用 "\" 而不是 "/"

编辑:解释。从技术上讲,这些被称为“常规 表达式”(正则表达式),而不是 "patterns".

  • .任意字符

  • .*任意数量(包括0)任意种类的字符

  • .*/ 任意数量的任何类型的字符,后跟一个 /

  • [^/] 任意字符但不包括 /

  • [^/]+ 任意数量(1个或多个)的任何类型的字符, 但不是 /

  • () 包含组。您可以在以下情况下使用群组 替换为 \1\2

因此,查找任何类型的字符,然后是 /,然后是 除了路径分隔符之外的任何内容。将其替换为“任何东西 但不是分隔符。

有很多关于正则表达式的好教程,找找看吧。

一个简单的方法是使用 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"