如何在 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"
我有几个大型 R 对象保存为 .RData 文件:"this.RData"、"that.RData"、"andTheOther.RData" 等等。我没有足够的内存,所以我想在一个循环中加载每个,提取一些行,然后卸载它。但是,一旦我加载 (i),我需要先删除 (i) 的“.RData”部分,然后才能对对象 "this"、"that"、"andTheOther" 执行任何操作。我想做与 How to iterate over file names in a R script? 中描述的相反的事情,我该怎么做?感谢
编辑:我没有提及这些文件不在工作目录中并且也有文件路径。我遇到了
你的意思是这样的吗?
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"