Я построил процесс, который будет строить матрицу подобия коэффициентов кости-соренсона, используя R, но с необходимыми циклами он, естественно, работает очень медленно. Я пытаюсь реализовать решение с использованием R cpp, но я полностью застрял в ссылках на векторные знаки с помощью кода c ++, и это не помогает, что я не работал с c ++ почти 7 лет. Предполагаемое поведение для приведенного ниже кода состоит в том, чтобы взять два вектора R различной длины (в среднем около 5-7 элементов), которые имеют сравниваемые значения, и вычислить числитель коэффициента кости как целое число. Векторы будут заполнены значениями с плавающей запятой (342,02; 551,54; et c). Я получаю ошибку компиляции, что «подписанное значение не является массивом, указателем или вектором». Я уже посмотрел этот ответ, а также этот ответ, документы R cpp и cplusplus.com за любую помощь в этом вопросе, но я думаю, что просто нужно, чтобы кто-то указал на очевидную вещь, которую мне явно не хватает. Смотрите код ниже. , .
#include <Rcpp.h>
using namespace Rcpp;
#include <stdio.h>
using namespace std;
#include <cstdlib>
// [[Rcpp::export(name = "diceNumcpp")]]
int diceNum(NumericVector iso1, NumericVector iso2){
NumericVector is1 = clone(iso1);
NumericVector is2 = clone(iso2);
int n = 0;
int m = 0;
int match = 0;
while (is1[n]!=0){ //issue occurs with 'n' reference
if (is2[m]==0){ //and again here with 'm' reference
n++;
m=0;
}
if (is1[n]!=0 && is2[m]!=0){ //same issue here with this line and the next
if (abs(is1[n]-is2[m])/is2[m]<0.01){
match++;
}
m++;
}
}
return match;
}
Буду очень признателен за любую помощь или критику моего ужасного c ++. Спасибо!
РЕДАКТИРОВАТЬ:
Вот некоторые примеры данных.
Код R:
iso1 <- c(595.06, 423.02, 321.06)
iso2 <- c(425.01, 321.06)
iso3 <- c(1476, 382.01)
Ожидаемый выход между iso1 и iso2 = 2, Ожидаемый выход между iso1 и iso3 = 2, и ожидаемый выход между iso2 и iso3 = 0
> sessionInfo()
R version 3.6.0 (2019-04-26)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 16299)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] Rcpp_1.0.3
loaded via a namespace (and not attached):
[1] compiler_3.6.0 tools_3.6.0