Si este es su propio script para que tenga control sobre cómo está formateado, una simple convención sería suficiente. Solo asegúrese de que cada nombre de función comience en el primer carácter de su línea y que la palabra functiontambién aparezca en esa línea. Cualquier otro uso de la palabra functiondebe aparecer en una línea que comienza con un espacio o tabulación. Entonces una solución de una línea es:
sub(" .*", "", grep("^\\S.*function", readLines("myscript.R"), value = TRUE))
Las ventajas de este enfoque son que
Es muy simple . Las reglas simplemente se establecen y solo se necesita una línea simple de código R para extraer los nombres de las funciones. Regex también es simple y para un archivo existente es muy fácil de verificar, solo haga clic en la palabra functiony verifique si cada aparición que se muestra sigue la regla.
No es necesario ejecutar la fuente. Es completamente estático .
en muchos casos no necesitará cambiar el archivo fuente en absoluto y en otros habrá cambios mínimos. Si está escribiendo el guión desde cero con esto en mente, es aún más fácil de organizar.
Hay muchas otras alternativas a lo largo de la idea de convenciones. podría tener una expresión regular más sofisticada o podría agregar# FUNCTION al final de la primera línea de cualquier definición de función si está escribiendo el script desde cero y luego extrae esa frase y extrae la primera palabra en la línea, pero la sugerencia principal aquí parece particularmente atractivo debido a su simplicidad y las otras ventajas enumeradas.
Prueba
# generate test file
cat("f <- function(x) x\nf(23)\n", file = "myscript.R")
sub(" .*", "", grep("^\\S.*function", readLines("myscript.R"), value = TRUE))
## [1] "f"
source(), pero este viejo hilo puede ser de su interés.