В случае использования
Rcpp::sourceCpp('src/triple_balance.cpp')
triple_balance("10")
ошибка ваша, потому что пока ваш интерфейс использует double
double triple_balance(const double& balance)
, это не то, что вы предоставляете когда вы набираете "10"
- это вектор символов (или «строка»)!
Вы можете поймать это автоматически МАГИЧЕСКИ с помощью R cpp, если вы используете векторные аргументы:
// [[Rcpp::export]]
NumericVector triple_balance(const NumericVector & balance) {
return balance * 3;
}
Это теперь проверяет, когда создается структура данных R cpp:
R> triple_balance(10)
[1] 30
R> triple_balance(10L)
[1] 30
R> triple_balance("10")
Error in triple_balance("10") :
Not compatible with requested type: [type=character; target=double].
R>
Лучше всего то, что он автоматически работает с векторами:
R> triple_balance(c(c(2,3), seq(10,30,by=10), log10(1:3)))
[1] 6.00000 9.00000 30.00000 60.00000 90.00000 0.00000 0.90309 1.43136
R>
, а также обрабатывает неконечные значения:
R> triple_balance(c(10, NA, NaN, Inf, -Inf))
[1] 30 NA NaN Inf -Inf
R>
Редактировать Автор кстати, если я сохраню вашу версию в исходном файле с добавлением _orig
, она отлично подойдет и для меня (Ubuntu 20.04; текущий R cpp)
R> triple_balance_orig("10")
Error in triple_balance_orig("10") :
Not compatible with requested type: [type=character; target=double].
R> packageVersion("Rcpp")
[1] ‘1.0.4.11’
R>
Это поведение не является новым кодом , поэтому я немного удивлен, что это приводит к сбою вашей установки RHEL.
Edit 2: Ради аргумента, я также сделал это в пакете, и это тоже не приводит к отключению RStudio. У меня самая последняя тестовая версия 1.4.390. (Я видел такую хрень sh при повторной компиляции пакетов и ошибок, это может произойти. Здесь этого не должно происходить.)
Вы можете попробовать свой код в https://rstudio.cloud чтобы быстро попробовать другую среду.