r - 从变量名创建字符串并通过递归函数运行
问题描述
我有一个数据框列表:
frame_list = lst(NotREP, Day0_4, Day10_12, Day14_15, Day20, Day5_7, OIS)
而且我想为每个数据框创建文件夹,每个文件夹都带有数据框的名称(然后根据同一函数中的其他分析将内容放入这些文件夹中,所以我不能只使用 sapply)。我创建了(简化的)函数:
Create_dir = function(data){
filename = deparse(substitute(data))
dir.create(filename, showWarnings = FALSE)
}
并使用了 for 循环
for(i in frame_list){
Create_dir(i)
}
但这会将所有文件夹命名为“i”。有没有办法可以通过该Create_dir
函数运行数据框列表并为文件夹提供正确的名称?
或者,我可以在 framelist 中命名数据框:
names(Filter_list) = c("NotREP", "Day0_4", "Day10_12", "Day14_15", "Day20",
"Day5_7", "OIS")
但我不知道如何让 for 循环识别名称 [i]。我努力了
for(i in Filter_list) {
foldername = names(Filter_list)[[i]]
Create_dir(foldername)
}
和各种类似的东西,但无法获得for
识别名称的功能。
谢谢!
解决方案
这是一个表示您应该使用eval
而不是deparse
在循环中使用函数时的表示:
frame_list <- list("Hello", "World")
Create_dir1 = function(data) print(deparse(substitute(data)))
Create_dir2 <- function(data) print(eval(substitute(data)))
for(i in frame_list) Create_dir1(i)
#> [1] "i"
#> [1] "i"
for(i in frame_list) Create_dir2(i)
#> [1] "Hello"
#> [1] "World"
更新
根据来自 OP 的更多信息,我们根本不需要非标准评估,因为名称可以在dir.create
没有Create_dir
函数的情况下直接传递给:
names(Filter_list) <- c("NotREP", "Day0_4", "Day10_12", "Day14_15", "Day20",
"Day5_7", "OIS")
for(i in names(Filter_list)){
dir.create(i, showWarnings = FALSE)
dosomethingwith(Filter_list[[i]])
}
由reprex 包于 2020-05-15 创建(v0.3.0)
推荐阅读
- c# - 温莎城堡:注册似乎没问题时控制器解析失败
- debian - Debian Stretch - 存储库“http://192.168.196.1/sw/repo/deb9 stretch Release”没有发布文件
- python - SIP邀请消息python
- python -
0x00等是什么意思? - android - 手机启动时服务不启动
- css - 如何使用 CSS-in-JS 方法设置 body 标签的样式?
- laravel - 通过 Laravel 在 Mysql 中插入数据的最佳方法
- java - (De)用 Gson 序列化抽象类
- loops - NASM:将多字符输入转换为十进制
- react-native - 带有 ColdFusion 组件的 React-native axios