Se esse for seu próprio script, para que você tenha controle sobre como ele é formatado, uma simples convenção seria suficiente. Apenas verifique se o nome de cada função começa no primeiro caractere de sua linha e se a palavra function
também aparece nessa linha. Qualquer outro uso da palavra function
deve aparecer em uma linha que começa com um espaço ou tabulação. Em seguida, uma solução de uma linha é:
sub(" .*", "", grep("^\\S.*function", readLines("myscript.R"), value = TRUE))
As vantagens dessa abordagem são que
é muito simples . As regras são simplesmente declaradas e há apenas uma linha simples de código R necessária para extrair os nomes das funções. O Regex também é simples e, para um arquivo existente, é muito fácil verificar - apenas cumprimente a palavra function
e verifique se cada ocorrência exibida segue a regra.
não há necessidade de executar a fonte. É totalmente estático .
em muitos casos, você não precisará alterar o arquivo de origem e, em outros, haverá alterações mínimas. Se você estiver escrevendo o script do zero, com isso em mente, é ainda mais fácil organizar.
Existem muitas outras alternativas ao longo da ideia de convenções. você pode ter um regex mais sofisticado ou adicionar # FUNCTION
no final da primeira linha de qualquer definição de função se estiver escrevendo o script do zero e depois cumprimentar essa frase e extrair a primeira palavra da linha, mas a principal sugestão aqui parece particularmente atraente devido à sua simplicidade e às outras vantagens listadas.
Teste
# 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()
, mas esse segmento antigo pode ser do seu interesse.