2014-02-03 4 views
2

У меня есть данные на сервере в виде наборов данных SAS, которые обновляются ежедневно. Я бы хотел, чтобы они были автоматически упакованы в пакеты R, а затем упакованы в репозиторий пакетов на сервере. Это должно позволить моим коллегам и мне легко работать с этими упакованными данными в R и постоянно обновляться, поскольку каждый день он меняет, просто называя install.packages и update.packages.R - Автоматическое создание пакетов данных

Что представляет собой хороший способ реализовать это автоматическое создание пакетов данных?

Я написал код, который вставляет набор данных, преобразует его и затем использует packages.skeleton() для динамического создания структуры пакета. Затем я должен перезаписать файл DESCRIPTION, чтобы обновить версию вместе с некоторыми другими изменениями. Затем, наконец, нужно вызвать tools :: build и tools :: check, чтобы упаковать всю партию и выгрузить ее в репозиторий. Есть ли способ лучше?

ответ

1

Что вы можете сделать, это создать файл R под папку data для загрузки данных:

data 
    --sas_data.R 

И в этом sas_data.R вы пишете код для загрузки данных с сервера. Код должен быть что-то вроде:

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

Затем вы вызываете его с помощью data:

data(sas_data) 
+0

Означает ли это, что данные не загружаются и не преобразуются до тех пор, пока пользователь не попытается использовать его? Я думал, что я буду преобразовывать наборы данных SAS как часть процесса сборки пакета. Но это определенно другой путь. Благодарю. –

+0

Я думал, что в идеале будет «крюк сборки пакета» (не похожий на крюк загрузки пакета), чтобы я мог захватить, преобразовать и очистить набор данных SAS при создании пакета. –

+0

@NickAllen моя идея - подготовить данные для пакета. Представьте, что у вас есть другой источник (например, какая-то база данных), вы просто добавляете новый файл data_source.R в свою папку с данными. Лично я никогда не использовал это в производстве, но нашел рабочий процесс надежным. – agstudy

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 = '[email protected]')" 
+0

Вы можете использовать этот файл makefile вместе с этим [здесь] (https://gist.github.com/halpo/1374344), чтобы автоматизировать процесс конверсии и сборки. Автоматизация развертывания требует больше информации о вашем контексте. – Ramnath

Смежные вопросы