cpp4r este acum pe CRAN!

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe pacha.dev/blogși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)


Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.

Dacă această postare vă este utilă, vă rog cu drag o donație minimă pe Buy Me a Coffee. Va fi folosit pentru a-mi continua eforturile Open Source. Explicația completă este aici: Un mesaj personal de la un colaborator Open Source.

Puteți să-mi trimiteți întrebări pentru blog folosind acest formular și să vă abonați pentru a primi un e-mail când apare o nouă postare.

cpp4r vă ajută să interacționați cu obiectele R folosind codul C++. Este un furk al pachetului cpp11 cu sintaxă identică și obiective similare.

Toată documentația este aici, inclusiv configurațiile de bază, de ajustare și cazurile de utilizare avansate: https://cpp4r.org/.

cpp4r poate fi folosit ca înlocuitor pentru cpp11 în pachetele existente sau noi. Gândiți-vă la cpp11 și cpp4r ca MySQL și MariaDB: sunt aproape identice, dar cpp4r are câteva caracteristici suplimentare.

Folosind cpp4r într-un pachet

Pentru a adăuga cpp4r la un pachet existent, instalați-l mai întâi:

install.packages("cpp4r", repos = "https://cran.r-project.org")

# or the development version:
remotes::install_github("pachadotdev/cpp4r")

Apoi puneți fișierele C++ în fișierul src/ director și adăugați următoarele în fișierul DESCRIPTION:

LinkingTo: cpp4r

Apoi decorați funcțiile C++ cu care doriți să le expuneți la R ((cpp4r::register)).

cpp4r este o bibliotecă numai antet, fără dependențe dure și nu folosește o bibliotecă partajată, deci este simplu și fiabil de utilizat în pachete fără teama de nepotriviri la timp de compilare și de rulare.

Alternativ, puteți furniza versiunea curentă instalată a antetelor cpp4r în pachetul dvs cpp4r::vendor(). Acest lucru vă asigură că anteturile vor rămâne neschimbate până când le actualizați în mod explicit.

Noțiuni de bază

Consultați documentația pentru a începe să utilizați cpp4r în scripturile dvs., mai ales dacă sunteți nou în programarea C++.

Obține ajutor

Deschideți o problemă sau trimiteți-mi un e-mail. Voi face tot posibilul să răspund înainte de 48 de ore.

Exemple

Adăugarea de dimname-uri la o matrice pe partea C++:

cpp4r::writable::doubles_matrix<> out(2, 2);

out(0, 0) = 1;
out(0, 1) = 2;
out(1, 0) = 3;
out(1, 1) = 4;

cpp4r::writable::list dimnames(2);
dimnames(0) = R_NilValue; // No row names
dimnames(1) = cpp4r::strings({"x1", "x2"});

out.attr("dimnames") = dimnames;

Folosind numere complexe (nu se poate face în cpp11):

cpp4r::r_complex zero{0, 0};
cpp4r::r_complex one{1, 1};
cpp4r::r_complex two{2, 2};
cpp4r::r_complex three{3, 3};

cpp4r::writable::complexes x({one, two, three});
cpp4r::writable::complexes y({zero});

auto x_data = x.data();
y = std::move(x);

bool y.size() == 3; // true
bool y.data() == x_data; // true
bool y.is_altrep() == false; // true

Unele conversii implicite pentru liste (cpp11 are nevoie as_sexp() în jurul scalarilor pentru aceasta):

writable::list result;

double one = 1.0, two = 2.0, three = 3.0;

result.push_back({"one"_nm = one});
result.push_back(named_arg("two", two));
result.push_back({"three"_nm = 3});

writable::list result2(4);

int four = 4;
bool five = false;
const char* six = "six";
std::vector seven = {7.0, 7.1, 7.2};

result2(0) = four;
result2(1) = five;
result2(2) = six;
result2(3) = seven;

result2.names() = {"four", "five", "six", "seven"};

Contribuind

Contribuțiile sunt binevenite! Vă rugăm să consultați vigneta internă pentru detalii despre alegerile de design și stilul de codare.

Codul de conduită

Vă rugăm să rețineți că proiectul cpp4r este lansat cu un Cod de conduită pentru colaboratori. Contribuind la acest proiect, sunteți de acord să respectați termenii acestuia.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.