Je me demande si quelqu'un peut m'expliquer comment R exécute un C
à partir d'une commande R tapée à l'invite de la console. Je suis particulièrement troublé par R
a) des arguments de la fonction et b) de l'appel de la fonction elle-même.
Prenons un exemple, en l'occurrence set.seed()
. Je tape le nom à l'invite, j'obtiens la source ( Pour en savoir plus, cliquez ici ), voir qu'il y a finalement un .Internal(set.seed(seed, i.knd, normal.kind)
et donc de rechercher consciencieusement le nom de la fonction correspondante dans la base de données .Internals
section de /src/names.c
, trouver s'appelle do_setseed
et est en RNG.c
ce qui m'amène à...
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;
}
- Quels sont les
CAR
,CADR
,CADDR
? Mes recherches m'amènent à penser qu'il s'agit d'uneLisp
La construction influencée concernant les listes, mais au-delà de cela, je ne comprends pas ce que ces fonctions font ou ce qu'elles font. pourquoi ils sont nécessaires . - Qu'est-ce que
checkArity()
faire ? -
SEXP args
semble s'expliquer d'elle-même, mais s'agit-il d'une liste des arguments transmis lors de l'appel de la fonction ? - Qu'est-ce que
SEXP op
représenter ? J'entends par là un opérateur (comme dans les fonctions binaires telles que+
), mais alors qu'est-ce que leSEXP call
pour ?
Quelqu'un peut-il m'expliquer ce qui se passe lorsque je tape
set.seed(1)
à l'invite de la console R, jusqu'au moment où skind
y nkind
sont définis ? Je ne suis pas en mesure de bien comprendre le code source à ce niveau et le chemin de l'interpréteur à la fonction C.