我创建了一个R函数来执行子集,摘要,密度和绘图。我最初在RStudio中将子集分配给我的工作区,但我开始遇到内存限制。最新版本试图将汇总的观察计数存储在SQLite数据库中,而不是将子集导出为自己的数据帧。理论是这会占用更少的内存。为了执行此过程,我在我的函数中创建了一个新数据库,如下所示:
sqldf("attach 'mydb' as new")
sqldf("create table TotalsTbl as select 'resimrr' as name, count(*) as count from resimrr", dbname="mydb")
sqldf("insert into TotalsTbl select 'resimrrquan' as name, count(*) as count from resimrrquan", dbname="mydb")
然后我创建了几个表,并将它们填充为函数进程。最后,我将SQLite Tables的查询结果导出到数据帧,然后将其分配给我的工作区。
这提供了预期的结果:
sqldf("select * from TotalsTbl, dbname="mydb")
name count
1 resimrr 95517
2 resimrrquan 93928
现在的挑战是数据库是持久的。它是在第一次调用函数时创建的,它存在于我的Rsessions和我的工作区中,如果我再次运行该函数,则CREATE TABLE命令会失败,因为表已经存在。所以问题是如何在我的函数中完成后删除/清理'mydb'?