Как вы определяете пространство имен функции?

r namespaces

2370 просмотра

4 ответа

Учитывая функцию, как вы определяете, из какого пространства имен она взята?

Например, если я печатаю mean.defaultв командной строке, вывод включает в себя тот факт, что он находится в базовом пакете. Я хочу быть в состоянии сделать что-то подобное getNamespace(mean.default)и заставить его вернуть «базу» (или реальную базовую среду).

Существует getNamespaceфункция, но, похоже, она принимает только имена пакетов, а не имена функций.

print.functionиспользует внутренний код для извлечения пространства имен. Я добрался до просмотра do_printfunctionв src/main/print.cно потом сдался.

Автор: Richie Cotton Источник Размещён: 30.07.2019 07:23

Ответы (4)


34 плюса

Решение

Я совсем недавно узнал о том, find()что, кажется, делает именно это.

R> find("ls")
[1] "package:base"
R> find("na.locf")
[1] "package:zoo"
Автор: Dirk Eddelbuettel Размещён: 21.06.2011 05:11

14 плюса

findFunctionэто еще один вариант и ?findFunctionговорит, что вы должны использовать его вместо findс mode="function". Результатом findFunctionявляется список окружений, в которых находятся видимые версии функции.

Автор: Joshua Ulrich Размещён: 21.06.2011 05:29

12 плюса

Вы хотите getNamespaceName+ environment:

getNamespaceName(environment(mean.default))
# [1] "base"
Автор: hadley Размещён: 22.06.2011 12:37

1 плюс

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

getEnvName <- function(f) {
    attached <- c(environmentName(.GlobalEnv), loadedNamespaces())
    envs <- c(.GlobalEnv, lapply(attached[-1], .getNamespace))
    attached[vapply(envs, function(env) exists(f, env, inherits = FALSE), logical(1))]
}
median <- function() {}
getEnvName("median")
#> [1] "R_GlobalEnv" "stats"
getEnvName(".try_quietly")
#> [1] "tools"
getEnvName("getEnvName")
#> [1] "R_GlobalEnv"
Автор: Artem Klevtsov Размещён: 07.01.2016 09:36
Вопросы из категории :
32x32