Сохраните доступные методы пакета с их исходным кодом в текстовом файле. - PullRequest
0 голосов
/ 02 апреля 2019

мы можем увидеть исходный код метода, набрав имя метода в консоли, как показано ниже:

 > rowMeans
function (x, na.rm = FALSE, dims = 1L) 
{
    if (is.data.frame(x)) 
        x <- as.matrix(x)
    if (!is.array(x) || length(dn <- dim(x)) < 2L) 
        stop("'x' must be an array of at least two dimensions")
    if (dims < 1L || dims > length(dn) - 1L) 
        stop("invalid 'dims'")
    p <- prod(dn[-(id <- seq_len(dims))])
    dn <- dn[id]
    z <- if (is.complex(x)) 
        .Internal(rowMeans(Re(x), prod(dn), p, na.rm)) + (0+1i) * 
            .Internal(rowMeans(Im(x), prod(dn), p, na.rm))
    else .Internal(rowMeans(x, prod(dn), p, na.rm))
    if (length(dn) > 1L) {
        dim(z) <- dn
        dimnames(z) <- dimnames(x)[id]
    }
    else names(z) <- dimnames(x)[[1L]]
    z
}
<bytecode: 0x0000000021b2fec8>
<environment: namespace:base>

Но я хочу перечислить все имена методов и их исходный код, доступные в пакете один за другим.

Ответы [ 2 ]

3 голосов
/ 02 апреля 2019

Следующее дает вам все функции в пространстве имен (включая неэкспортированные функции):

ns = asNamespace('testthat')
function_code = eapply(ns, function (f) if (is.function(f)) capture.output(f))
ns_code = paste(
    names(function_code),
    lapply(function_code, paste, collapse = '\n'),
    sep = ' = '
)
writeLines(ns_code, filename)

Если вы хотите захватывать только экспортированные функции, вам нужно добавить дополнительный шаг, в котором вы фильтруете символы попоявляются ли они в getNamespaceExports(ns):

exports = mget(getNamespaceExports(ns), ns, inherits = TRUE)
function_code = lapply(exports, function (f) if (is.function(f)) capture.output(f))
…
3 голосов
/ 02 апреля 2019

Вы можете использовать раковина

# Setting up file
con <- file("/my/ouput/file/file.txt")
sink(con, append=TRUE)
sink(con, append=TRUE, type="message")

# Function to print source of
print("Function: ls")
ls

# Closing file
sink() 
sink(type="message")

EDIT Здесь мы печатаем все функции из ggplot2 в файл:

# Listing all functions in package
library(ggplot2)
ggplot_functions <- ls("package:ggplot2")

# Setting up file
con <- file("c:/Users/H52Z/Desktop/source.txt")
sink(con, append=TRUE)
sink(con, append=TRUE, type="message")

# Prints all functions in package
for(fun in ggplot_functions) {
  print(fun)
  print(get(fun))
}

# Closing file
sink() 
sink(type="message")
...