sorteo semanal resultados primitiva loterias jueves ganadores ganadora euromillones estado combinacion bonoloto ayer apuestas r

resultados - primitiva semanal



Cómo ver el código fuente de R. Función interna o.Primitiva? (3)

Ninguno de estos muestra el código fuente de la función pnorm ,

stats:::pnorm getAnywhere(pnorm)

¿Cómo puedo ver el código fuente de pnorm ?

sum (..., na.rm = FALSE) .Primitive("sum") .Primitive("sum") function (..., na.rm = FALSE) .Primitive("sum") methods(sum) no methods were found

y, ¿cómo puedo ver el código fuente de la función sum ?


El código fuente R de pnorm es:

function (q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) .Call(C_pnorm, q, mean, sd, lower.tail, log.p)

Entonces, técnicamente hablando, al escribir "pnorm" te muestra el código fuente. Sin embargo, es más útil: las tripas de pnorm están codificadas en C, por lo que el consejo del código fuente de la pregunta anterior en R solo es periféricamente útil (la mayoría se concentra en funciones ocultas en espacios de nombres, etc.).

El artículo de Uwe Ligges en R news (p.43) es una buena referencia general. De ese documento:

Cuando se mira el código fuente R, a veces se muestran las llamadas a una de las siguientes funciones: .C (), .Call (), .Fortran (), .External (), o .Internal () y .Primitive (). Estas funciones llaman a puntos de entrada en código compilado como objetos compartidos, bibliotecas estáticas o bibliotecas de enlaces dinámicos. Por lo tanto, es necesario buscar en las fuentes del código compilado, si se requiere una comprensión completa del código. ... El primer paso es buscar el punto de entrada en el archivo ''$ R HOME / src / main / names.c'', si la función de llamada R es .Primitive () o .Internal (). Esto se hace en el siguiente ejemplo para el código que implementa la suma de la función R ''simple'' ().

(Énfasis agregado porque la función precisa sobre la que preguntaste ( sum ) está cubierta en el artículo de Ligges).

Dependiendo de cuán seriamente desee profundizar en el código, puede valer la pena descargar y desempaquetar el código fuente como lo sugiere Ligges (por ejemplo, entonces puede usar herramientas de línea de comandos como grep para buscar a través del código fuente). Para una inspección más casual, puede ver las fuentes en línea a través del servidor R Subversion o el espejo github de Winston Chang (los enlaces aquí están específicamente para src/nmath/pnorm.c ). (Adivinar el lugar correcto para mirar, src/nmath/pnorm.c , toma cierta familiaridad con la estructura del código fuente R).

mean y sum se implementan en summary.c .


Sé que esta publicación tiene más de 2 años, pero pensé que esto podría ser útil para algunos usuarios que buscan esta pregunta.

Básicamente estoy copiando mi respuesta a esta otra pregunta similar para que pueda ser útil para algunos usuarios R que desean explorar los archivos fuente C.

  1. Primero, con pryr puede usar la función show_c_source que buscará en GitHub el fragmento de código relevante en los archivos fuente C. Funciona para. Funciones internas y .Primitive.

    body(match.call) # .Internal(match.call(definition, call, expand.dots)) pryr::show_c_source(.Internal(match.call(definition, call, expand.dots)))

    Lo cual lo lleva a esta página , mostrando que unique.c contiene la función do_matchcall .

  2. He creado este archivo delimitado por tabuladores , construyendo sobre el archivo names.c y usando find-in-files para determinar la ubicación del código fuente. Hay algunas funciones que tienen archivos específicos de la plataforma, y ​​un puñado de otros para los cuales hay más de un archivo con código fuente relevante. Pero, por lo demás, el mapeo está bastante bien establecido, al menos para la versión actual (3.1.2).


> methods(mean) [1] mean.data.frame mean.Date mean.default mean.difftime mean.IDate* [6] mean.POSIXct mean.POSIXlt mean.yearmon* mean.yearqtr* Non-visible functions are asterisked > mean.default function (x, trim = 0, na.rm = FALSE, ...) { if (!is.numeric(x) && !is.complex(x) && !is.logical(x)) { warning("argument is not numeric or logical: returning NA") return(NA_real_) } if (na.rm) x <- x[!is.na(x)] if (!is.numeric(trim) || length(trim) != 1L) stop("''trim'' must be numeric of length one") n <- length(x) if (trim > 0 && n) { if (is.complex(x)) stop("trimmed means are not defined for complex data") if (any(is.na(x))) return(NA_real_) if (trim >= 0.5) return(stats::median(x, na.rm = FALSE)) lo <- floor(n * trim) + 1 hi <- n + 1 - lo x <- sort.int(x, partial = unique(c(lo, hi)))[lo:hi] } .Internal(mean(x)) } <bytecode: 0x155ef58> <environment: namespace:base>