13

この質問に「CRANには十分ですか?」というタイトルを付けることもできます。

特定のタスクのために構築した関数のコレクションがあります。これらのいくつかは便利な機能です:

# Returns odds/evens from a vector
odds=function(vec) {
    stopifnot(class(vec)=="integer")
    ret = vec[fpart(vec/2)!=0]
    ret
}
evens=function(vec) {
    stopifnot(class(vec)=="integer")
    ret = vec[fpart(vec/2)==0]
    ret
}

いくつかは、一般的なSOの質問に答えるのに役立つことが証明されているマイナーな追加です。

# Shift a vector over by n spots
# wrap adds the entry at the beginning to the end
# pad does nothing unless wrap is false, in which case it specifies whether to pad with NAs
shift <- function(vec,n=1,wrap=TRUE,pad=FALSE) {
    if(length(vec)<abs(n)) { 
        #stop("Length of vector must be greater than the magnitude of n \n") 
    }
    if(n==0) { 
        return(vec) 
    } else if(length(vec)==n) { 
        # return empty
        length(vec) <- 0
        return(vec)
    } else if(n>0) {
        returnvec <- vec[seq(n+1,length(vec) )]
        if(wrap) {
            returnvec <- c(returnvec,vec[seq(n)])
        } else if(pad) {
            returnvec <- c(returnvec,rep(NA,n))
        }
    } else if(n<0) {
        returnvec <- vec[seq(1,length(vec)-abs(n))]
        if(wrap) {
            returnvec <- c( vec[seq(length(vec)-abs(n)+1,length(vec))], returnvec )
        } else if(pad) {
            returnvec <- c( rep(NA,abs(n)), returnvec )
        }

    }
    return(returnvec)
}

最も重要なのは、他では見られない既存のクラスの拡張です(たとえば、格子プロット用のCDFパネル関数、さまざまなxtableおよびLaTeX出力関数、地理空間オブジェクトタイプ間の処理と変換、およびさまざまなGISのような操作を実行するためのクラスなど)オーバーレイとして)。

これらをインターネット上のどこかでR化された形式で利用できるようにしたい(たとえば、プレーンテキスト関数は私が探しているものではないのでブログに投稿する)。これにより、メンテナンスが簡単になり、私や他の人がアクセスできるようになります。私が行くどんなコンピュータからでもそれら。論理的なことは、それらからパッケージを作成してCRANに投稿することです。実際、私はすでにそれらをパッケージ化しています。しかし、この関数のコレクションはCRANパッケージに適していますか?

私には2つの主な懸念があります:

  1. 関数には一貫したオーバーレイがないようです。これは、さまざまなことを実行する関数のコレクションにすぎません。
  2. 私のコードは必ずしもきれいではありません。より良いコーディング方法を学んだので、それをクリーンアップしようとしましたが、Rコアに値する美しいコードを作成することはカードに含まれていません。

CRANのWebページには、驚くべきことに投稿に関するガイドラインがありません。一部の人々はそれが便利だと思うが、ある意味でRを永久にロックして、かなり基本的な関数名を取り上げさせることを考えると、CRANに投稿する必要がありますか?または、install.packagesのようなコマンドを使用してインストールできる別の場所はありますか?パッケージをWebページに投稿したり、パッケージをインストールするためにURLを覚えておく必要があることは避けたいことに注意してください(特にバージョン管理の問題の場合)。

4

3 に答える 3

5

http://r-forge.r-project.org/を使用します。ページの先頭から:

R-Forge は、R パッケージ、R 関連ソフトウェア、およびその他のプロジェクトの開発のための中心的なプラットフォームを提供します。これは FusionForge に基づいており、最高の SVN、毎日ビルドおよびチェックされたパッケージ、メーリング リスト、バグ追跡、メッセージ ボード/フォーラム、サイト ホスティング、永続的なファイル アーカイブ、完全なバックアップ、および完全な Web ベースの管理に簡単にアクセスできます。

于 2011-07-26T11:18:22.650 に答える
4

ほとんどのパッケージは、明確な目的を持つ関連する機能のコレクションであるべきです。そのため、あるものをまとめてグループ化し、それらを分類できるかどうかを確認すると便利です。いくつかの小さなパッケージは、1 つの巨大でまとまりのないパッケージよりも優れています。

Hmiscそうは言っても、さまざまなユーティリティ関数のコレクションであるパッケージがいくつかありますgregmisc。そのような関数がいくつかある場合は、いくつかのその他のパッケージの作成者に連絡して、パッケージにコードを含めることができるかどうかを確認する価値があるかもしれません。

きれいなコードを書くためにできる最も重要なことは、スタイル ガイドを使用することです。

于 2011-07-26T11:02:54.077 に答える
1

私の意見では、このタイプの素材をパッケージにするのは得策ではありません。
その他のパッケージ は存在しますが、ほとんどの場合、歴史的な理由および/または信頼できる貢献者によるものです。Frank Harrell Hmisc を参照してください。

この選択が異なる関数のコレクションに適合しない主な理由が 3 つあります。

  1. CRAN だけで、概して 7000 個のパッケージがあります。特定の分野を対象としていない場合、パッケージが選択される可能性は低く、その場合でも、他の確立されたパッケージが同じことを行う可能性が非常に高くなります。したがって、あなたのパッケージは、それが扱う問題に対する独自の/より良い解決策も提供する必要があります.

  2. リポジトリ、特に CRAN はタスク指向であり、パッケージの機能が一貫したタスクに対処する必要があることを示唆しています。それには正当な理由があります。たとえば 50 個の自律機能を含むパッケージ全体をダウンロードしても、そのうちの 2 つだけが必要な場合は意味がありません。代わりに、パッケージが私の特定のデータ問題を解決する場合、それらのほとんど (すべてではないにしても) が必要になる可能性が高くなります。

  3. R リポジトリは、コンテンツをマスクする傾向があります。技術ブログとは異なり、関数のソースはすぐには表示されません。別のソース パッケージをダウンロードする必要があり、パッケージの構造が原因で多くのオーバーヘッドが発生します。これにより、表示したい実際の関数と、他の関数を読み取る必要が埋もれてしまいます。

私の意見では、一般的な便利な機能に最適な場所は、GitHub のようなサイトです。実際には:

  1. 構文ハイライトの快適さですぐにそれらを読むことができます。それらが興味深い場合は、R に貼り付けて試してみることができます。そうでない場合は、次の関数を読み取るためにステップオーバーするだけです。

  2. コードを編成する可能性はありますが、実際のパッケージのすべての制約はありません。同様の関数は、同じサブフォルダー内の同じファイルおよび一貫したファイルに含まれる場合があります。

  3. 簡単な方法で他の人に自分のアイデアを示すことができます。readme ファイルは、(マークダウンを介して) すぐにミニ Web ページのようなものになります。それに比べて、CRAN は非常に厳格です。

他にも多くの利点 (改訂履歴、貢献の受け入れ、GitHub ページ) があり、興味がある場合とない場合があります。

もちろん、いくつかの関数が安定した一貫した方向に成長した後、それらを実際の CRAN パッケージに変換します。また、それらを試すためのコピーと貼り付けの方法が不便になるためです。

編集: 現在、GitHub に代わるものがあります。これも考慮に入れることができます。GitHub は、CRAN の準備がまだ整っていないパッケージを配布したり、公式の CRAN 配布ページを統合したりするための一般的な方法になっています。

于 2016-08-14T14:28:37.213 に答える