Я давно использовал R cpp с Rstudio, но недавно я потерял функции автозаполнения и диагностики c.
Мне удалось отследить причину RcppArmadillow.
Вот базовый c код c ++ по умолчанию для нового файла с изменениями.
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
NumericVector timesTwo(NumericVector x) {
return x * 2;
}
// [[Rcpp::export]]
double GetValueAt(const NumericMatrix& x, int row = 1, int col = 1) {
return x(row-1,col-1);
}
/*** R
timesTwo(42)
GetValueAt(as.matrix(42),1,1)
*/
Этот код работает и выполняется правильно. // [[Rcpp::depends(RcppArmadillo)]]
, даже если его закомментировано необходимо, и если оно удалено или дважды прокомментировано, код завершается ошибкой при ссылке x(row-1,col-1);
.
Я использую .rs.setClangDiagnostics(2)
для диагностики clang, и я получаю следующую ошибку для выполнения кода:
error: OpenMP support and version of OpenMP (31, 40 or 45) was disabled in PCH file but is currently enabled
И, похоже, именно из-за этой ошибки завершение завершается неудачей.
Об этом раньше спрашивали онлайн, например, здесь: https://community.rstudio.com/t/rstudio-does-not-display-correct-c-diagnostics-libclang-error/26439, https://community.rstudio.com/t/rcpparmadillo-code-completion/41736 https://github.com/rstudio/rstudio/issues/4685
Но, похоже, ни у одного из них нет решения, которое я могу воспроизвести. Я не знаю, как я могу изменить настройки файла PCH или иным образом.
Я использую Windows 7 64 бит. R 3.5.3, Rstudio 1.2.5033, с компилятором Rtools 3.5, RcppArmadillo 0.9.850.1.0, Все недавно обновлено, кроме самого R.
Завершение кода работает только с R cpp и без Armadillo, но basi c Функциональность NumericMatrix потеряна. Я хотел бы получить какой-нибудь способ вернуть завершение, либо с помощью Armadillo, либо заставить мой код компилироваться с R cpp, а не с Armadillo. Спасибо.