21

現在の R セッションで呼び出すことができるすべての関数の名前を持つベクトルを返す呼び出しが必要です。これを達成する方法を知っている人はいますか?

(ユーザーが入力した変数をこのベクトルに対してチェックしたいと思います。たとえば、c変数名としてユーザーが入力したときに予期しない問題が発生しました)

更新:現在ロードされているすべてのパッケージから関数名を取得したいと思います。

解決策(中途半端): Joris Meys のヒントに基づいてlsf.str()、現在使用可能なすべての関数名を含む並べ替えられたベクトルを返す次の関数を思いつきました。

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

しかし、より良い回答については、Joris Meys の投稿へのコメントも参照してください。

4

2 に答える 2

21

私はlsf.str()スタートとして使用します。

例:x <- as.character(lsf.str("package:base"))基本パッケージ内のすべての関数のリストが表示されます。チェックするすべてのパッケージを追加できます。statsそしてutilsまず思いつく。

編集:現在ロードされているパッケージに関する質問について:

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))

トリックを行います。

于 2010-11-24T14:24:11.427 に答える
7

何ヶ月も前 (2007 年) に R-Help で同様の質問をしたところ、Brian Ripley 教授が解決策として次のように答えてくれました。

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)
于 2010-11-24T14:28:12.123 に答える