#r #rcpp
#r #rcpp
Вопрос:
Я только что нашел невероятно полезный пакет под названием Rfast, который использует Rcpp для выполнения рутинных операций. Поэтому я хотел бы выразить им свою благодарность за их работу, а также создателям Rcpp, конечно.
Может быть, глупый вопрос, но кто-нибудь знает, где я могу получить исходный код для Rfast
rowOrder
функции? Похоже, его нет на их github, хотя код для другой функции, подобной Sort
этой, есть.
РЕДАКТИРОВАТЬ: я хотел бы увидеть фактический cpp-код базовой функции, которая выполняет операции, которая в конце вызывается row_order_p
Ответ №1:
Я вижу это здесь: https://github.com/RfastOfficial/Rfast/search ?q= rowOrder
Что затем приводит к https://github.com/RfastOfficial/Rfast/blob/343808948622137707563425a2f5624b58ec19f0/R/Order.R
Комментарии:
1. Спасибо, Дирк, но я не вижу источника самой функции, только то, что они используют
.Call(Rfast_row_order_p,x,stable,descending)
, как вы думаете, есть ли способ увидеть код cpp того, что вызывается,.Call
например, с помощью другой функции, которую я упомянул?2. Нашел — он есть в утилитах.
3. Адаптация поиска Дирка: github.com/RfastOfficial/Rfast/search ? q=Rfast_row_order_p
Ответ №2:
Нашел его, он был в утилитах col / row по этому адресу: https://github.com/RfastOfficial/Rfast/blob/2cc0ddcaa1f6a4844733871b259ce44b9e48d279/src/col_row_utilities_p.cpp
IntegerMatrix row_order_p(NumericMatrix x,const bool stable,const bool descending){
const int ncl=x.ncol(),nrw=x.nrow();
IntegerMatrix f(nrw,ncl);
mat xx(x.begin(),nrw,ncl,false);
imat ff(f.begin(),nrw,ncl,false);
#ifdef _OPENMP
#pragma omp parallel for
#endif
for(int i=0;i<nrw; i){
ff.row(i)=Order<irowvec,rowvec>(xx.row(i),stable,descending,1);
}
return f;
}
Комментарии:
1. Я думаю, что Дирк ответил на заданный вами вопрос о
rowOrder
функции, а не на вопрос, который вы, похоже, имели в виду , который касается базового кодаRfast_row_order_p
.2. Мне любопытно, хотя, что вы этого хотите?
3. Эй, Манос, надеюсь, чтение вашего исходного кода позволит мне повысить свои скудные навыки работы с c . Недостаточно прочитал исходный код, но это определенно того стоит. Я также искал быструю
paste_by_row
функцию, которая позволила бы мне быстро вставлять все столбцы фрейма данных по строкам, чтобы генерировать уникальные ключи строк, но пока мои усилия дают скорость, аналогичную той, что доступна вdata.table
. Есть предложения?