r - 在 R 中,如果我在“arg_233_1_3.RData”下有一个 RData 文件,我如何仅通过指定“arg”来调用它?
问题描述
在R
中,我目前有很多文件夹,并且在每个文件夹中,我都有不同的.RData
文件。每个RData
文件都有不同的名称,但总是以"arg"
. 例如, "arg_233_1_1.RData"
,"arg_233_1_2.RData"
等。
有没有办法通过调用正则表达式等来加载这些文件'arg'
?
例如,这不起作用:
load("arg*.RData")
但是有没有这种味道有效的东西?谢谢。
解决方案
根据@MrFlick 的评论,有两个工具会有所帮助:
list.files(pattern="^arg.*\\.RData")
将返回当前目录中与模式匹配的所有文件。这些模式遵循正则表达式规则,而不是正常的文件通配规则。list.files(pattern="^arg.*\\.RData", recursive=TRUE, full.names=TRUE)
将做同样的事情,但查看当前(或path=...
)目录和所有后代目录。这样full.names
做是为了包含完整路径,否则它将只返回文件名,而不是整个路径。
一旦知道如何找到它们,就可以使用以下方法之一以编程方式加载它们:
ign <- sapply(list.files(pattern="^TEX.*up.png$"), load)
以上内容应全部加载到全局环境中。这可能很好(如果所有变量中的所有变量都是唯一的),但也可能会默默地覆盖变量。
一个更安全的选择是将它们加载到强制列表/环境中:
full_of_arg <- sapply(list.files(pattern="^TEX.*up.png$"),
function(fn) { e <- new.env(parent=emptyenv()); load(fn, envir=e); e; },
simplify=FALSE)
将返回 a list
of environment
s,这通常足够好。为此,您可以full_of_arg[[1]]$varname
获取varname
在第一个 arg 文件中命名的变量。名称 ( names(full_of_arg)
) 将告诉您变量是从哪个文件中提取的。
访问 anenvironment
实际上与访问list
s 相同,尽管存在一些细微差别(例如,不能按位置索引;那是e <- new.env(); e[[1]]
行不通的),您应该没问题。如果你真的必须有嵌入式列表,你可以使用as.list(e)
. (列出了一些其他访问器机制https://gist.github.com/hadley/5434786。)
推荐阅读
- vue.js - Vuetify.js shaped card being overridden by v-sheet
- docker - 在 Docker 中运行时向 Solr 添加字段?
- php - 无效的数据表格式:谷歌条形图上必须至少有 2 列
- css - Inject CSS styles to shadow root via Webpack
- powershell - "The WSMan provider host process did not return a proper response." issue while downloading a published package from SFTP server to target server
- php - "Failed to Decrypt" Error 190 in Instagram Graph API
- python - openpyxl中超链接的奇怪行为
- azure - Why is Azure SignalR Service recommended when deploying a Blazor Server Side app?
- python - Python: Fill gradationally between two vertical lines
- java - Check if firebase realtime database Username exists