项目中利用R语言编程实现某一数据分析功能,分析功能可以简要概括如下:第一个文件是数据文件,7000行*323列,每一行是一个采样点;第二个文件是判读文件,有319行,每一行是一个判读逻辑表达式。
在R语言实现初期,先将判读逻辑表达式以字符串形式转化为待执行的代码(仍是字符串),之后通过eval(parse(text = y))的形式执行。程序中需要使用循环的地方都用apply家族函数(主要是apply和sapply,apply可以传递多个参数)替换,以此用向量化操作提高程序执行效率。
功能实现后面临一个问题是程序执行效率,对于前述的数据规模,运行时间达4min多,程序执行效率较低。和同事一起寻找原因,发现程序中的eval(parse(text = y))执行较为耗时,将319条逻辑判据以“现成”形式(可执行代码)放进程序中,发现运行时间一下子变为不足8s。因此,程序优化工作的重点就放在了判读逻辑表达式的处理上。
至于如何将生成代码并写入脚本中,发现一个讨巧的做法是,直接用write.table(codes, file = file_address, row.names = F, col.names = F, quote = F, fileEncoding = “UTF-8”)的方法将要生成的代码包装成一个函数,并写入文件中。codes就是需要生成的代码,可以用字符串操作完成代码的拼接、换行等,file_address是代码存放路径,在file_address中规定文件类型为.R即可,write.table不仅可以生成.txt文件,还可以生成.R文件,好强大!
通过上述方法生成.R文件后,再通过source(“code_address”)的方式将代码引入环境。