sqldf与R代码库的可维护性

sqldf与R代码库的可维护性,r,sqldf,data-munging,R,Sqldf,Data Munging,如果要在R中构建大量的组织范围的代码库,那么依赖sqldf包作为数据挖掘任务的默认方法是否可以接受?或者,最佳实践是在可能的情况下依赖于具有特定于R的语法的操作吗?通过依赖sqldf,我们可以在R代码库中引入大量不同的语法SQL 我问这个问题是关于可维护性和风格的。我搜索了现有的R风格指南,没有找到任何关于这个主题的内容 编辑:为了澄清我关心的工作流程,考虑一个充分利用SQL LDF的数据Mulink脚本: library(sqldf) gclust_group<-sqldf("SELEC

如果要在R中构建大量的组织范围的代码库,那么依赖sqldf包作为数据挖掘任务的默认方法是否可以接受?或者,最佳实践是在可能的情况下依赖于具有特定于R的语法的操作吗?通过依赖sqldf,我们可以在R代码库中引入大量不同的语法SQL

我问这个问题是关于可维护性和风格的。我搜索了现有的R风格指南,没有找到任何关于这个主题的内容

<>编辑:为了澄清我关心的工作流程,考虑一个充分利用SQL LDF的数据Mulink脚本:

library(sqldf)
gclust_group<-sqldf("SELECT clust,SUM(trips) AS trips2
                FROM gclust
                GROUP BY clust")

gclust_group2<-sqldf("SELECT g.*, h.Longitude,h.Latitude,h.withinss, s.trips2
                 FROM highestd g
                 LEFT JOIN centers h
                 ON g.clust=h.clust
                 LEFT JOIN gclust_group s
                 ON g.clust=s.clust")
库(sqldf)

gclust_组写入函数。具有描述其用途的清晰名称的函数。记录它们。编写测试

函数是否包含
sqldf
部分,或者使用
dplyr
,或者使用裸R代码,或者调用
Rcpp
,都与此级别无关

但是,如果您想尝试将某些内容从
sqldf
更改为
dplyr
,那么重要的是您有一个稳定的平台来进行实验,这意味着定义良好的函数和一组良好的测试。如果使用
dplyr
,一个函数的运行速度可能会快100倍?很好,您可以用这两种方法分析和测试代码

您甚至可以对代码进行分支,在修订控制系统中有一个
sqldf
分支和一个
dplyr
分支(您使用的是RCS,对吧?),并并行工作,直到获得一个优胜者


从可维护性的角度来看,如果您的代码库经过良好的文档记录和测试,那么将其他语法引入R代码并不重要。

效率是一个问题吗?如果是,则不是一个好的选择,而且到目前为止也不容易维护(您可以单独存储“sql”代码,并使用
readLines
)对其进行调用)。如果您有sql和sql背景,您可以调查
数据。table
软件包,该软件包具有更体面的可维护工作流,并与sql有一些相似之处。(阅读常见问题解答2.16)[[.考虑到可维护性,
dplyr
更可取,因为它使用SQL或其他外部存储,并对所有外部存储强制使用相同的语法,对内部表也有类似的操作,例如
data.frame
data.table
。Spacedman的回答很有意义。如果您编写了清晰的函数,那么包引用在函数中,内部并不重要;相反,重点是手头任务的效率。这取决于维护人员的背景。如果他们了解SQL而不太了解R,那么维护SQL就容易多了。如果他们很了解R,R可能更可取。如果数据是持久的,那么使用数据库似乎很重要,但如果是临时的y那么这不是问题。是否使用sqldf或驱动程序包(RSQLite等)直接取决于您正在做什么。虽然可能存在个别实例(大多数是速度无关紧要的小示例),但sqldf总体速度并不比R慢。一些用户使用sqldf来获得比R更快的速度优势。是的,我使用Git来表示RCS。我知道函数内部的其他语法并不特别重要。