Piszę sterownik hybrydowy dla dplyra i zastanawiam się nad dwoma rzeczami na temat kodu dplyr.cpp:
- Opcja na.rm jest używana jako szablon i nie jest przekazywana jako parametr do klas Sd, Var, Sum itd. Jaki jest tego powód?
- Co robi linia
TAG(arg3) == R_NaRmSymbol
(linia 54) oznaczać?
Odpowiedzi:
2 dla odpowiedzi № 1Chociaż nie jestem autorem kodu, oto moje najlepsze domysły na odpowiedzi na twoje pytania:
Opcja na.rm jest używana jako szablon i nie jest przekazywana jako parametr do klas Sd, Var, Sum itd. Jaki jest tego powód?
Prawdopodobnie dla wydajności w czasie pracy - dplyr
próbuje przenieść obliczenia od czasu wykonania do czasu kompilacji, gdy jest to możliwe. Często odbywa się to poprzez użycie szablonu.
Co oznacza linia TAG (arg3) == R_NaRmSymbol (linia 54)?
Węzły na liście pary R mają TAG
atrybut, który zwykle odnosi się do nazwy formalnej. Stąd, dplyr
używa tego do znalezienia formalnego z nazwą na.rm
. R przechowuje wiele często używanych symboli w src / main / names.c -- powinieneś zobaczyć NaRmSymbol
tam.
Tak więc, skutecznie, kod znajduje rzeczywistą wartość argumentu związaną z formalną na.rm
i robi rzeczy oparte na jego prawdziwości.