r - 从列表中动态分配函数
问题描述
语境:
我正在尝试设置一些模拟数据测试,并且我已将一些模拟数据作为 csvs 保存在名为“test/”的目录中。
每个文件都与一个 get_data 类型函数相关,例如 get_energy() 的模拟数据存储为 test/get_energy.csv。
我想使用 list.files() 将函数分配给读取 csv 的环境。
files<-list.files('test/')
for (name in substr(files,1,nchar(files)-4)){
assign(name,function(){read.csv(eval(parse(text=paste0('test/',name,'.csv')))) })
}
但是当我尝试通过运行查看函数 get_energy 的源代码时
get_energy
它返回
function(){read.csv(eval(parse(text=paste0('test/',name,'.csv'))))}
而我需要它来评估字符串表达式以便它返回
function(){read.csv('test/get_energy.csv')}
解决方案
将整个函数定义放在字符串中,如下所示:
files <- list.files("test/", pattern = 'csv$')
for (name in substr(files,1,nchar(files)-4)) {
assign(name, eval(parse(text = paste0('function(){ read.csv(', '"test/', name, '.csv', '")}'))))
}