Ich frage mich, ob mir jemand veranschaulichen kann, wie R einen C
Aufruf von einem R-Befehl ausführt, der an der Eingabeaufforderung der Konsole eingegeben wird. Ich bin besonders verwirrt durch R
's Behandlung von a) Funktion Argumente und b) der Funktionsaufruf selbst.Verstehen, wie .Internal C-Funktionen in R
Nehmen wir ein Beispiel, in diesem Fall set.seed()
. Ich frage mich, wie es funktioniert Ich gebe den Namen an der Eingabeaufforderung ein, bekomme die Quelle (look here for more on that), siehe dort ist schließlich ein .Internal(set.seed(seed, i.knd, normal.kind)
, also pflichtbewusst den relevanten Funktionsnamen im .Internals
Abschnitt von /src/names.c
nachschlagen, finde es heißt do_setseed
und ist in RNG.c
, die mich führt zu ...
SEXP attribute_hidden do_setseed (SEXP call, SEXP op, SEXP args, SEXP env)
{
SEXP skind, nkind;
int seed;
checkArity(op, args);
if(!isNull(CAR(args))) {
seed = asInteger(CAR(args));
if (seed == NA_INTEGER)
error(_("supplied seed is not a valid integer"));
} else seed = TimeToSeed();
skind = CADR(args);
nkind = CADDR(args);
//...
//DO RNG here
//...
return R_NilValue;
}
- Was sind
CAR
,CADR
,CADDR
? Meine Forschung führt mich zu glauben, dass sie einLisp
beeinflusstes Konstrukt betreffend Listen sind, aber darüber hinaus verstehe ich nicht, was diese Funktionen tun oder , warum sie benötigt werden. - Was macht
checkArity()
? SEXP args
scheint selbsterklärend, aber ist dies eine Liste der Argumente, die im Funktionsaufruf übergeben wird?- Was bedeutet
SEXP op
? Ich nehme das Operator (wie in binären Funktionen wie+
), aber was ist dann dieSEXP call
für?
Ist jemand in der Lage durchfließt, was passiert, wenn I
set.seed(1)
an der Konsole R Aufforderung bis zu dem Punkt, an dem skind
und nkind
definiert sind,? Ich finde, ich bin nicht in der Lage, den Quellcode auf dieser Ebene und den Weg vom Interpreter zur C-Funktion gut zu verstehen.
Vielleicht möchten Sie beginnen bei http://adv-r.had.co.nz/C-interface.html - ich werde in Kürze einige weitere Details für dieses spezielle Beispiel aufschreiben. – hadley
@hadley danke, ich werde das heute Abend durchmachen. Ich warte wirklich darauf, dass dein Buch veröffentlicht wird! Bald, hoffe ich. :-) –
@ SimonO101: Ich würde hinzufügen "... in R" in Ihrer Frage Titel –