如何在R循环中修改i?

如何在R循环中修改i?,r,for-loop,paste,R,For Loop,Paste,我有几个大的R对象保存为.RData文件:this.RData、that.RData和theother.RData等等。我没有足够的内存,所以我想在循环中加载每一行,提取一些行,然后卸载它。然而,一旦加载I,我需要先去掉I的.RData部分,然后才能处理这个、那个和其他对象。我想做与《我如何才能做到》中描述的相反的事情?Thx 编辑:我没有提到文件不在工作目录中,并且有一个文件路径。我偶然发现,file_path_sans_ext去掉了扩展名,但路径的其余部分仍然存在。你是说这样的吗 i <

我有几个大的R对象保存为.RData文件:this.RData、that.RData和theother.RData等等。我没有足够的内存,所以我想在循环中加载每一行,提取一些行,然后卸载它。然而,一旦加载I,我需要先去掉I的.RData部分,然后才能处理这个、那个和其他对象。我想做与《我如何才能做到》中描述的相反的事情?Thx


编辑:我没有提到文件不在工作目录中,并且有一个文件路径。我偶然发现,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路径上,必须使用\\而不是/

编辑:解释。从技术上讲,这些被称为常规 表达式是正则表达式,而不是模式

。任何字符

*任意数字,包括任何类型的字符的0

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

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

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

并将组括起来。您可以在需要时使用这些组 替换为\\1、\\2等

所以,查找任何类型的字符,后跟/,后跟 除路径分隔符之外的任何内容。用任何东西替换这个 但不是分离器


regexp有很多很好的教程,请仔细阅读。

使用base::basename从文件路径中提取基名称,然后使用tools::file\u path\u sans\u ext删除文件扩展名


你可以使用GSUB,你能详细说明一下吗?FWIW,这里是新手…你想替换字符串的一部分。这就是gsub的作用。您可以使用gsub.RData、、i来替换不需要的部件。查看?gsub了解更多示例。我很困惑,从什么中删除?请给我们看些东西。加载RData后,原始命名对象将保留—而不是扩展名为.RData的文件名。@Parfait如果使用循环加载保存的对象a.RData、B.RData、C.RData,则环境中有对象a、B和C。要使用这些对象,需要修改for循环中的i,使其仅读取A、B或C,并删除.Rdata部分。在我的例子中,我也有不同的路径指向不同的项目目录,这些目录也需要删除,下面用户Ott的回答显示了如何删除。谢谢。我不会假装完全理解,.*/[^/]+,\\1中的每个元素都在做什么,但是我可以看到整个过程是使用一系列通配符匹配多个模式的。感谢您的解释。通俗易懂的英语比让我完全困惑的gsub更容易理解。请看我对原始问题的评论中的注释。我发现你的编辑解释非常有用,但更多。。。预消化!这是有用的。我可以从现在的rdatafiles中避免清理时的额外RMOBJ
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"