我在服务器上以SAS数据集的形式提供数据,每天更新。我希望将这些软件自动封装到R软件包中,然后放入服务器上的软件包存储库中。这应该允许我和我的同事轻松使用R中的这个打包数据,并通过简单地调用install.packages
和update.packages
来保持每天更新的最新状态。
实现这种自动创建数据包的好方法是什么?
我编写了一些代码来提取数据集,转换它然后使用packages.skeleton()
来动态创建包结构。然后,我必须覆盖DESCRIPTION文件以更新版本以及其他一些编辑。然后最后必须调用tools :: build和tools :: check来打包整个批次并将其放入存储库中。还有更好的方法吗?
答案 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
,使用包*.sas7bdat
从sas
目录中读取所有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 = '$@')"