Предположим, у меня есть data.frame
следующим образом:Обобщить с rcpp
set.seed(45)
DF <- data.frame(x=1:10, strata2013=sample(letters[1:3], 10, TRUE))
x strata2013
1 1 b
2 2 a
3 3 a
4 4 b
5 5 b
6 6 a
7 7 a
8 8 b
9 9 a
10 10 a
И я хотел бы, чтобы получить COUNTS для каждого уникального значения в столбце strata2013
, затем, используя data.table
(для скорости), можно было бы сделать это таким образом:
DT <- as.data.table(DF)
DT[, .N, by=strata2013]
strata2013 N
1: b 4
2: a 6
Теперь я хотел бы т и выполните это в Rcpp
, как учебное упражнение. Я написал и опробовал приведенный ниже код, который должен обеспечивать тот же вывод, но вместо этого он дает мне ошибку. Вот код:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector LengthStrata (CharacterVector uniqueStrata, DataFrame dataset) {
int n = uniqueStrata.size();
NumericVector Nh(n);
Rcpp::CharacterVector strata=dataset["strate2013"];
for (int i = 0; i < n; ++i) {
Nh[i]=strata(uniqueStrata(i)).size();
}
return Nh;
}
Вот сообщение об ошибке:
conversion from 'Rcpp::Vector<16>::Proxy {aka Rcpp::internal::string_proxy<16>}'
to 'const size_t { aka const long long unsigned int}' is ambiguous
Что я делаю неправильно? Большое спасибо за Вашу помощь.
Является ли это упрощенным примером? Потому что из вашего описания ist звучит как что-то, что можно сделать очень эффективно с R. – Roland
Я знаю, что агрегированная функция может сделать это легко, но я просто хочу сравнить ... – Herimanitra
Я не говорил о 'aggregate'. Существуют более эффективные альтернативы. Однако ваше описание не похоже на то, что ему нужно «aggregate». Но вы не очень четко объясняете в своем вопросе. – Roland