2011-12-04 8 views
3

スクリプトの1つに基本関数のタイトル(例:rnorm)を取得したいと考えています。それはドキュメントに含まれていますが、私はそれを "つかむ"ことができません。ドキュメントから関数のタイトルを取得

RDファイルに記載されている行を意味します。これは、\title{}というファイルまたはドキュメントの一番上の行です。この単純なもののために非常に大きなオーバーヘッドを持つものとして -

toolsからRd_db関数を呼び出すせずにこのを行うと、すべてのRDファイルを解析する任意の簡単な方法はありますか?他の事:私は私のシステムにはRdをファイル(ちょうどRDBを持っていない

  • Rdのファイルは私の機能を保持しているかわからない

    • :私はあまりにもparse_Rdてみましたが、 rdxおよびrds)。だから、

    (オフライン)のドキュメントが最善:)


    POCのデモとなり、解析する機能:あなたはhelp,ためのコードを見ればあなたがいることがわかり

    > get.title("rnorm") 
    [1] "The Normal Distribution" 
    
  • +2

    'fgui ::: parseHelp(" rnorm ")'はそれを行うと思われますが、期限が切れているようです。そのソースを参照して、ツールパッケージとRの最新バージョンを使用するように修正するか、作成者に連絡して既に完了しているかどうかを確認してください。 –

    +0

    ありがとうございます@G。Grothendieckがその機能に注目してくれたので、私は現在のRシステムで動作するように更新しようとしましたが、DWinはもっと高速でした:) – daroczig

    答えて

    4

    関数index.searchはヘルプファイルの場所を引っ張っているように見え、関連するfind.packages()関数のデフォルトはNULLです。判明THA tthereは、その関数foの助けもないもさらされているので、私はそれが(ベース、ツール、utilsの)であったパッケージの通常の容疑者をテストし、「utilsのになってしまった。だから、

    utils:::index.search("+", find.package()) 
    #[1] "/Library/Frameworks/R.framework/Resources/library/base/help/Arithmetic" 
    

    ghelp <- utils:::index.search("+", find.package()) 
    gsub("^.+/", "", ghelp) 
    #[1] "Arithmetic" 
    ghelp <- utils:::index.search("rnorm", find.package()) 
    gsub("^.+/", "", ghelp) 
    #[1] "Normal" 
    

    何を求めていることは\title{Title}ですが、ここで私はどのように解析する特定のRdファイルを見つけるためにあなたを示している、あなたはすでにそれを行う方法を知っているかのような音である

    EDIT。: @Hadleyはヘルプテキストをすべて取得する方法を提供しています。

    target <- gsub("^.+/library/(.+)/help.+$", "\\1", utils:::index.search("rnorm", 
                        find.package())) 
    doc.txt <- pkg_topic(target, "rnorm") # assuming both of Hadley's functions are here 
    print(doc.txt[[1]][[1]][1]) 
    #[1] "The Normal Distribution" 
    
    +1

    これらは実際にはファイルではありません - 実際にはrオブジェクトデータベース。 – hadley

    +0

    @hadley:さらに手順を踏み出しましたが、パッケージ名を抽出し、上記のようにpkg_topic値から最初の行を抽出してタスクを完了する必要がありました。 –

    +0

    私は彼がパッケージを知っていると思った:ベース。とにかく質問が混乱しています。実際に何が必要かを知るのは難しいです。 – hadley

    3

    それはあなたが望むものを完全に明らかではないが、以下のコードは、あなたがしているトピックに対応するRDデータ構造を取得しますので、上記のindex.search()の値にすることを適用し、パッケージ名、興味がある - あなたはそれを操作して、必要なものを抽出することができます。

    簡単な方法があるかもしれませんが、残念ながら必要なコードはほとんどエクスポートされずに文書化されています。私は本当にベースhelpパッケージがあったと思う。

    pkg_topic <- function(package, topic, file = NULL) { 
        # Find "file" name given topic name/alias 
        if (is.null(file)) { 
        topics <- pkg_topics_index(package) 
        topic_page <- subset(topics, alias == topic, select = file)$file 
    
        if(length(topic_page) < 1) 
         topic_page <- subset(topics, file == topic, select = file)$file 
    
        stopifnot(length(topic_page) >= 1) 
        file <- topic_page[1]  
        } 
    
        rdb_path <- file.path(system.file("help", package = package), package) 
        tools:::fetchRdDB(rdb_path, file) 
    } 
    
    pkg_topics_index <- function(package) { 
        help_path <- system.file("help", package = package) 
    
        file_path <- file.path(help_path, "AnIndex") 
        if (length(readLines(file_path, n = 1)) < 1) { 
        return(NULL) 
        } 
    
        topics <- read.table(file_path, sep = "\t", 
        stringsAsFactors = FALSE, comment.char = "", quote = "", header = FALSE) 
    
        names(topics) <- c("alias", "file") 
        topics[complete.cases(topics), ] 
    } 
    
    +0

    @hadleyもコードのこの素晴らしいセットのためにありがとう、また素敵な答えを得るのを助けます。 – daroczig

    関連する問題