Подтвердить что ты не робот

Есть ли способ получить вектор с именем всех функций, которые можно использовать в R?

Я хотел бы получить вызов, который возвращает мне вектор с именами всех функций, которые я мог бы вызвать в текущем сеансе R. Кто-нибудь знает, как достичь этого?

(Я хотел бы проверить введенные пользователем переменные против этого вектора. У нас была непредвиденная проблема с входом пользователей, например, c в качестве имен переменных)

UPDATE: Я хотел бы получить имена функций из всех загруженных пакетов.

РЕШЕНИЕ (на полпути): На основе подсказки Joris Meys с lsf.str() появилась следующая функция, которая возвращает отсортированный вектор со всеми доступными именами функций:

getFunctionNames <- function() {
    loaded <- (.packages())
    loaded <- paste("package:", loaded, sep ="")
    return(sort(unlist(lapply(loaded, lsf.str))))
}

Бу, см. также комментарии к записи Джориса Мейса для получения более качественных ответов.

4b9b3361

Ответ 1

Я бы использовал lsf.str() как начало.

например: x <- as.character(lsf.str("package:base")) предоставляет вам список всех функций базового пакета. Вы можете добавить все пакеты, которые хотите проверить. stats и utils приходят на ум сначала.

EDIT: Что касается вашего вопроса о загруженных в настоящее время пакетах:

x < - unlist (sapply (search() [- 1], function (x) as.character(lsf.str(x)))) см. комментарии

pkgs <- search()
pkgs <- pkgs[grep("package:",pkgs)]
y <- unlist(sapply(pkgs,lsf.str))

делает трюк.

Ответ 2

Я попросил аналогичный Q в R-Help много лет назад (2007), и профессор Брайан Рипли предоставил это как решение:

findfuns <- function(x) {
     if(require(x, character.only=TRUE)) {
        env <- paste("package", x, sep=":")
        nm <- ls(env, all=TRUE)
        nm[unlist(lapply(nm, function(n) exists(n, where=env,
                                               mode="function",
                                               inherits=FALSE)))]
     } else character(0)
}
pkgs <- dir(.Library)
z <-  lapply(pkgs, findfuns)
names(z) <- pkgs
Z <- sort(unique(unlist(z)))

Что дает вывод, например:

> head(Z)
[1] "^"        "-"        "-.Date"   "-.POSIXt" ":"        "::"

Это было для поиска всех функций в пакетах, указанных объектом pkgs, чтобы вы могли контролировать, какие пакеты загружаются/проверяются.

Измененная версия, работающая с загруженным в настоящий момент пакетом пакетов, будет следующей:

findfuns2 <- function(pkgs) {
    nm <- ls(pkgs, all = TRUE)
    nm[unlist(lapply(nm, function(n) exists(n, where = pkgs,
                                            mode = "function",
                                            inherits = FALSE)))]
    if(isTRUE(all.equal(length(nm), 0)))
        character(0)
    else
        nm
}

pkgs <- search()
pkgs <- pkgs[grep("package:", pkgs)]
z <- lapply(pkgs, findfuns2)
z <- sort(unique(unlist(z)))
head(z)