фатальная ошибка: RcppArmadilloExtensions / sample.h: такого файла или каталога нет - PullRequest
0 голосов
/ 05 июля 2018

Я заранее извинюсь за отсутствие воспроизводимого примера (пока) - если это не будет легким ответом, я завтра поработаю над ним (хотя из-за характера вопроса я не уверен, как легко это будет).

Во-первых, у меня работает мой первый проект кода Rcpp! Это удивительно быстро, и делает именно то, что мне нужно было сделать! Спасибо всем, кто помог мне здесь, это было оценено.

Моя следующая задача - добавить это в пакет. Я использовал R пакетов Хэдли Уикхэма, чтобы собрать свой пакет, поэтому я использую roxygen2 и devtools::document() для документации и общих проверок, следуя этой книге. Я обратился к главе о скомпилированном коде (http://r -pkgs.had.co.nz / src.html , для удобства) и реализовал эти шаги. В частности:

  • Я запустил devtools::use_rcpp(), чтобы настроить пакет для использования Rcpp.
  • Я добавил соответствующие строки в другую функцию в пакете.
  • Я скопировал файл с моей функцией в новый каталог src.

Затем я попытался обновить документацию (devtools::document()), и я получил следующую ошибку:

simulate_mean.cpp:2:44: fatal error: RcppArmadilloExtensions/sample.h: No such file or directory
 #include <RcppArmadilloExtensions/sample.h>
                                            ^

Я искал стек-обмен для чего-то подобного и увидел старый пост, где одним из комментариев была потребность в // [[Rcpp::depends(RcppArmadillo)]] вверху ( Rcpp R, эквивалентный из NumericVector ). Это не проблема для меня - эта строка находится в правильном месте, без лишних пробелов (еще одна проблема, которую я обнаружил в stackexchange).

Первые несколько строк файла выглядят так:

#include <RcppArmadilloExtensions/sample.h>
// [[Rcpp::depends(RcppArmadillo)]]

using namespace Rcpp;

(ничего плохого я не вижу, и он прекрасно компилируется вне пакета).

Мой файл описания специально импортирует Rcpp и RcppArmadillo. Вот соответствующий раздел этого:

Imports:
    dplyr(>= 0.7.4),
    purrr (>= 0.2.4),
    Rcpp (>= 0.12.17),
    RcppArmadillo (>= 0.8.600.0.0)
Suggests: mvtnorm (>= 1.0-6),
    testthat
Encoding: UTF-8
LazyData: true
RoxygenNote: 6.0.1
License: MIT + file LICENSE
LinkingTo: Rcpp

Я обновил R и все пакеты как часть моего устранения неполадок, так что все используют последнюю версию. (Я также попробовал версию github devtools, с тем же результатом). Любые мысли о том, почему расширение sample.h не может быть найдено с помощью document()?

Заранее спасибо!

1 Ответ

0 голосов
/ 05 июля 2018

В вашем файле C ++ есть

 // [[Rcpp::depends(RcppArmadillo)]]

Для Rcpp::sourceCpp() это устанавливает необходимые флаги компилятора для заголовочных файлов для RcppArmadillo, которые будут найдены. Это не имеет такого же эффекта в пакете. Чтобы иметь это в пакете, вам нужно будет включить RcppArmadillo в LinkingTo в ваш DESCRIPTION:

LinkingTo: Rcpp, RcppArmadillo

Кстати, простой способ получить правильную структуру - использовать

RcppArmadillo::RcppArmadillo.package.skeleton()

для настройки скелета пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...