Я добавляю это как другой ответ, так как я получил его только из ответов Дирка и Дюкмейра.
Я обнаружил, что пакет во время тестирования Rcpp еще не был загружен, и поэтомуОтвет Duckmayr не сработал из коробки.Однако после некоторой путаницы я обнаружил, что его код при вызове только с параметром package
выведет текущий путь проекта, и поэтому я обнаружил, что в этот момент пакет будет загружен, однако с путем из проектарепозиторий.
Это действительно немного сбивает с толку, поскольку тесты, использующие R, работают с установочной папкой R должным образом (например, /home/user/R/x86_64-pc-linux-gnu-library/3.5/
).Мне нужно копнуть глубже, чтобы понять, почему это так.
В конце концов, я пошел с этой функцией, чтобы иметь возможность получить путь в тестах:
#include <Rcpp.h>
#include <string>
std::string get_datapath_fromR(std::string filename, std::string packageName)
{
Rcpp::Environment base("package:base");
Rcpp::Function sys_file = base["system.file"];
// "inst" field is necessary at this point
Rcpp::StringVector file_path_sv = sys_file(
"inst", "extdata", filename,
Rcpp::_["package"] = packageName,
Rcpp::_["mustWork"] = true
);
std::string file_path = Rcpp::as<std::string>(file_path_sv);
return file_path;
}
И я могувызовите его в таком тесте:
...
std::string datafile = get_datapath_fromR("data-sample", "package");
...
и получите в результате: /home/user/path/to/package/folder/packageName/inst/extdata/data-sample