Как посмотреть и скопировать конфигурацию Makevars R по умолчанию?

у меня нет ~/.R/Makevars файл и

> tools::makevars_user()
character(0)
> tools::makevars_site()
character(0)

Еще, R должен читать конфигурацию откуда-то как .cpp файлы, содержащие Rcpp экспорт в упаковке src Подкаталог компилируется нормально.

Мне интересно знать, как написать Makefile.win в src каталог, так что Rcpp файлы продолжают компилироваться вместе с TMB .cpp файлы. В настоящее время make-файл похож на:

all: fn1.dll fn2.dll

fn1.dll: fn1.cpp
Rscript --vanilla -e "TMB::compile('fn1.cpp')"
fn2.dll: fn2.cpp
Rscript --vanilla -e "TMB::compile('fn2.cpp')"
clean:
rm -rf *o

прекрасно работает для компиляции TMB файлы, и фактически предлагается: https://github.com/kaskr/adcomp/issues/43

Я пытался изменить makefile предложенный Дирком Вот но не удалось повторить Rповедение по умолчанию даже с новым новым тестовым пакетом.

Информация о моей сессии:

> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

1

Решение

Я до сих пор не знаю, как использовать Makevars делать то, что я хочу, что по существу:

  1. Сделать нормальный по умолчанию make в Rstudio (Windows 7) через Build and Reload пакет для всех Rcpp экспортировать файлы. Под капотом это называет Rcpp::compileAttributes() затем приступает к выполнению других команд построения пакетов.
  2. Сделать другое make используя Rstudio Build and Reloadкроме как теперь читает Makefile это только компилирует TMB код.

Тем не менее, у меня есть обходной путь. По сути, Руководство по расширениям R говорится, что:

Нечто похожее на поведение по умолчанию может быть воспроизведено в следующем файле `src / install.libs.R ‘:

Поскольку код для компиляции TMB .cpp файлы просто R Команды, достаточно легко интегрировать их в такой файл:

# replicate default R
files <- Sys.glob(paste("*", SHLIB_EXT, sep=''))
libarch <- if (nzchar(R_ARCH)) paste('libs', R_ARCH, sep='') else 'libs'
dest <- file.path(R_PACKAGE_DIR, libarch)
dir.create(dest, recursive = TRUE, showWarnings = FALSE)
file.copy(files, dest, overwrite = TRUE)

# now do TMB files
cpp_files <- list.files('./TMB/', full.names = T, pattern = '*.cpp')

for (f in cpp_files) {
TMB::compile(f)
}

files <- Sys.glob(paste("./TMB/*", SHLIB_EXT, sep=''))
libarch <- if (nzchar(R_ARCH)) paste('libs', R_ARCH, sep='') else 'libs'
dest <- file.path(R_PACKAGE_DIR, libarch)
dir.create(dest, recursive = TRUE, showWarnings = FALSE)
file.copy(files, dest, overwrite = TRUE)

Этот файл читает и компилирует все TMP тип .cpp файлы, хранящиеся в подкаталоге <pkgdir>/src/TMB, а затем копирует все последующие .dllв <pkgdir>/src/ а также <pkgdir>/src/TMB в каталог установки пакета.

Заметка, это возможно, но возможно очень сложно использовать Makevars чтобы выполнить компиляцию, когда файлы TMB хранятся в подкаталоге. Дирк рекомендовал пример в матричный пакет, но мне не повезло изменить код там, чтобы сделать то, что я хочу.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]