Cum să înveți C ++ ca utilizator R?

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 a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)


Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.

Din cauza întârzierilor cu plata bursei mele, dacă această postare vă este utilă, vă cer cu drag o donație minimă pentru a -mi cumpăra o cafea care va fi folosită pentru a continua eforturile mele open source. Dacă aveți nevoie de un pachet R sau un tablou de bord strălucitor pentru echipa dvs., puteți să -mi trimiteți un e -mail sau să întrebați pe Fiverr. Explicația completă este aici: un mesaj personal de la un contribuabil open source

Îmi puteți trimite întrebări pentru blog folosind acest formular.

Am primit această întrebare de la un cititor: Cum să înveți C ++ ca utilizator R?

Nu sunt profesor, așa că voi încerca să răspund pe baza propriului meu proces de învățare. În 2023, încercam să accelerez un cod pe care l-am scris pentru a efectua o simulare maximă Pseudo Poisson Pseudo Poisson (GEPPML). După verificarea fiecărei părți a codului – care a constat în mai multe operații liniare de algebră – și implementarea modificărilor pentru a evita ineficiențe, cum ar fi rescrierea obiectelor, utilizarea pentru bucle în loc de mapply()folosind o dublă pentru buclă în loc de outer() Funcție și similare a fost clar că C ++ ar putea fi o opțiune mai bună în ceea ce privește viteza.

După ce am folosit anterior RCPPArmadillo, am pus o întrebare de la StackOverFlow doar pentru a primi comentarii negative, cum ar fi „ești mut” și altele în aceeași linie, am început să citesc despre un nou pachet R numit CPP11, care a fost creat ca o alternativă la RCPP. Încă o dată, m -am întors la StackOverflow când un alt utilizator a scris „Du -te să plângi în altă parte” la întrebarea mea.

După ce am căutat resurse online care să mă ajute cu întrebările mele, am început să caut tutori online și nu am putut găsi o persoană cu experiență în C ++ și o înțelegere rezonabilă de algebră liniară. Soluția mea a fost să mă înscriu în ECE244 (fundamentele de programare) și să dedic 1-2 ore zilnic pentru a transcrie notele de clasă și pentru a mă gândi cum să folosesc ceea ce învățam acolo pentru problema mea particulară. A fost minunat să iau ECE244 cu profesorul Salma Emara și mă bucur că am participat la prelegerile ei care au acoperit fundamentele C ++.

Unii oameni susțin că trebuie să înveți C înainte de C ++. În cazul meu, știu foarte puțin despre C și nu am luat niciodată un curs formal despre C înainte de a învăța C ++. Prof. Emara are două cărți, una despre C și alta despre C ++ care este similară cu conținutul ECE244. Aș spune că C este pentru C ++ este ceea ce S-Plus este R, știind că S-Plus poate ajuta un pic să înțeleagă sintaxa R cu diferențe multiple.

Așa cum am menționat anterior, a trebuit să rezolv probleme liniare algebre, dar punctul de plecare este să obțin un compilator C ++ care funcționează. Am auzit că poate fi complicat pe Windows, dar atât Linux cât și Mac o furnizează în mod implicit (de exemplu, comanda G ++ din terminal). Am organizat pașii care au funcționat pentru mine de la compilarea unui program simplu până la utilizarea Armadillo, o bibliotecă de algebră liniară dedicată pentru C ++, în eBook C ++ gratuit pentru utilizatorii R. Ceea ce mi s -a părut util a fost să fac lucruri pe care le -am scris deja în R folosind C ++, și așa am organizat codurile R din manualul de la Hansen Econometrics folosind Armadillo cu R integrare în pachetul Hansen.

Cred că este crucial să urmați o abordare treptată, începând cu funcții simple, cum ar fi:

#include 

int main() {
  int a = 1;
  std::cout << a + 1 << std::endl;
  return 0;
}

care poate fi compilat cu g++ plus1.cpp -o test (sau alte variații precum g++ in.cpp -o out) și apoi vezi rezultatul cu ./test (sau ./out)

La fel și în R ar fi:

main <- function() {
  a <- 1
  print(a + 1)
}

Nu includeți iOstream pentru a imprima „A+1” ar duce la o eroare de compilator și am primi și o eroare dacă nu returnăm 0 în C ++, care ar fi similar cu returnarea „True” în R chiar și atunci când nu este necesar.

O traducere literală a codului C ++ ar fi:

main <- function() {
  a <- 1
  print(a + 1)
  return(TRUE)
}

În r putem face și acest lucru:

main = function() {
  a = 1L
  print(a + 1)
}

Cu toate acestea, în C ++ 1 înseamnă 1L în R. Valoarea implicită în C ++ este că numerele sunt numere întregi, în timp ce în r implicit este o dublă

> x = 1
> y = 1L
> z = 1.0
> class(x)
(1) "numeric"
> class(y)
(1) "integer"
> class(z)
(1) "numeric"

În C ++ putem face ceva de genul:

int a = 1;
double b = 2.0;
double c = a + b;

care ar fi diferit în ceea ce privește stocarea dacă folosim int c = a + b;.

C ++ este un limbaj care aplică tastarea corespunzătoare și lipsa unui ; ar duce la avertismente sau erori de compilator. Singura modalitate de a evita acestea este de a exersa și de a fi consecvent.

Ceea ce m -a ajutat să învăț C ++ a fost:

  1. Scrieți -vă în cuvinte ce trebuie să fac
  2. Comentează codul meu
  3. Nu vă gândiți mai întâi la eficiență, ci la corectitudine

Odată ce am obținut rezultate corecte, am început să mă gândesc la lucruri precum:

  1. Codul meu folosește memoria eficient?
  2. Suprascriu obiectele?
  3. Duplicând datele?

Consider că C ++ este un limbaj frumos și util. La început poate fi o provocare, dar îmi amintesc când am învățat R în 2015 și totul a fost provocator.

După ce obțineți exemple simple de rulat, puteți (și ar trebui) să explorați indicatoarele, să treceți după valoare, să treceți prin referință și caracteristici C ++ cu adevărat interesante care ne permit să fim cu adevărat eficienți în ceea ce privește utilizarea memoriei, dacă trebuie. Aceste concepte pot fi provocatoare pe măsură ce R (nici Python) oferă acestea. Cheia este:


Nu vă panicați și știți întotdeauna unde este prosopul dvs.

După ce puteți scrie cu încredere codul C ++, ar trebui să începeți să vă gândiți la integrarea R și C ++ folosind pachetul CPP11 sau CPP11Armadillo. Dacă aveți experiență creând pachete R, poate puteți începe cu integrarea R și C ++ cu exemple simple.

Odată m -am luptat să construiesc un program simplu ca exemplu pe care l -am arătat în această postare, dar apoi am plecat plângând în altă parte, așa cum a spus utilizatorul Stackoverflow, am pus prof. Emara o mulțime de întrebări, am căutat videoclipuri YouTube și am început să mă gândesc cum să rescriem propriile coduri R folosind C ++.

De atunci, am publicat patru articole științifice cu o componentă software puternică în care am folosit C ++ pentru a rezolva o problemă:

Vargas Sepúlveda, Mauricio. 2025. „Capybara: estimarea eficientă a modelelor liniare generalizate cu efecte fixe de înaltă dimensiune.” PLOS ONE Disponibil public pe 2025-08-25. https://doi.org/10.1371/journal.pone.0331178.

Vargas Sepúlveda, Mauricio. 2025. „Kendallknight: un pachet R pentru implementarea eficientă a calculului coeficientului de corelație Kendall.” PLOS ONE 20 (6): E0326090. https://doi.org/10.1371/journal.pone.0326090.

Vargas Sepúlveda, Mauricio și Schneider Malamud, Jonathan. 2025. „CPP11Armadillo: un pachet R pentru a utiliza biblioteca Armadillo C ++.” Softwarex 30 (mai): 102087. Https://doi.org/10.1016/j.softx.2025.102087.

Vargas Sepúlveda, Mauricio și Barkai, Lital. 2025. „Formatul Redatam și provocările sale pentru accesul la date și crearea de informații în politici publice.” Date și politică 7 (ianuarie): E18. https://dx.doi.org/10.1017/dap.2025.4.

Sper că acest lucru este util 🙂

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.