hi. "Writing R Extensions" provides a simple routine getListElement(), said to be based on a similar routine in the package stats, for C code to call to find a named element of a list . however, it doesn't work for the argument list passed to a .External(), as that is a PairList rather than a List.
below is a simple reworking (with slightly different semantics) that appears to work with PairLists. the argument "cmd" is used in producing an error() in the case where this the requested element is not found. (the original getListElement() would return R_NilValue, but for *my* use i found throwing the error easier at this lower level; possibly i should have parameterized that behavior.) here is an example of use: ---- static SEXP rimageread(SEXP args) { ... file = CHAR(STRING_ELT(getPairListElement(args, "file", "rimageread"), 0)); usemagick = LOGICAL(getPairListElement(args, "usemagickwand", "rimageread"))[0]; ... } ---- anyway, in the hope this may be of some use to someone. cheers, Greg Minshall ---- /* get the list element named str, or report an error() */ static SEXP getPairListElement(SEXP pairs, const char *str, const char *cmd) { for (pairs = CDR(pairs); pairs != R_NilValue; pairs = CDR(pairs)) { if (!isNull(TAG(pairs))) { if (strcmp(CHAR(PRINTNAME(TAG(pairs))), str) == 0) { return CAR(pairs); } } } error("%s: required parameter '%s' not specified", cmd, str); /*NOTREACHED*/ } ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.