R - 自动创建数据包

时间:2014-02-03 20:52:38

标签: r

我在服务器上以SAS数据集的形式提供数据,每天更新。我希望将这些软件自动封装到R软件包中,然后放入服务器上的软件包存储库中。这应该允许我和我的同事轻松使用R中的这个打包数据,并通过简单地调用install.packagesupdate.packages来保持每天更新的最新状态。

实现这种自动创建数据包的好方法是什么?

我编写了一些代码来提取数据集,转换它然后使用packages.skeleton()来动态创建包结构。然后,我必须覆盖DESCRIPTION文件以更新版本以及其他一些编辑。然后最后必须调用tools :: build和tools :: check来打包整个批次并将其放入存储库中。还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以在data文件夹下创建一个R文件来加载数据:

data
  --sas_data.R

在此sas_data.R中,您编写代码以从服务器加载数据。代码应该是这样的:

download.file(urll,dest_file)
## process here 
sas_data = read.table(dest_file)

然后使用data调用它:

data(sas_data)

答案 1 :(得分:0)

我建议使用makefile自动转换数据集。如果有多个数据集并且转换过程非常耗时,这将非常有用。 我假设sas文件位于名为sas的目录中。这是makefile

通过键入make data,使用包*.sas7bdatsas目录中读取所有sas7bdat个文件,并将其另存为*.rda个文件包的data目录中的名称。您可以通过向makefile添加软件包安装并使用TravisCI等持续集成系统来添加更多自动化,以便您的R软件包始终保持最新状态。

我创建了一个sample repo来说明我的想法。这是一个有趣的问题,我认为开发一种简单,灵活和强大的数据打包方法是有意义的。

SAS_FILES = $(wildcard sas/*.sas7bdat)
RDA_FILES = $(patsubst sas/%.sas7bdat, data/%.rda, $(SAS_FILES))


data: $(RDA_FILES)

data/%.rda: sas/%.sas7bdat
    Rscript -e "library(sas7bdat); library(tools); fname = file_path_sans_ext(basename('$<')); assign(fname, read.sas7bdat('$<')); save($(basename $(notdir $<)), file = '$@')"