首页 > 解决方案 > 从列表中动态分配函数

问题描述

语境:

我正在尝试设置一些模拟数据测试,并且我已将一些模拟数据作为 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')}

标签: r

解决方案


将整个函数定义放在字符串中,如下所示:

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', '")}'))))
}

推荐阅读