質問

この質問と同様に、「クランには十分ですか?」

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

# 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
}

いくつかは、一般的な質問に答えるのに有用であることが証明された小さな追加です。

# 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-zeed形式で利用できるようにしたいと思います(たとえば、単純なテキスト関数は私が探しているものではないため、ブログに投稿します)。私が行ったあらゆるコンピューターからそれら。論理的なことは、それらからパッケージを作成してクランに投稿することです。実際、私はすでにそれらをパッケージ化しています。しかし、この機能のコレクションはCRANパッケージに適していますか?

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

  1. 関数には一貫したオーバーレイがないようです。これは、さまざまなことを行う機能のコレクションです。
  2. 私のコードは常に最も美しいとは限りません。より良いコーディングプラクティスを学んだので、私はそれをきれいにしようとしましたが、Rコアに値する美しいコードを作成することはカードに含まれていません。

CRAN Webページは、驚くほど投稿に関するガイドラインが不足しています。一部の人々はそれが有用であると思うが、何らかの意味でReversed Rをかなり基本的な関数名を撮影することに永遠にロックすることを考えると、Cranに投稿する必要がありますか?または、インストールしてインストールするためにinstall.packagesのようなコマンドを使用できる別の場所がありますか?お知らせください。パッケージをWebページに投稿し、パッケージをインストールするためにURLを覚えておく必要があります(特にバージョン制御の問題については)。

役に立ちましたか?

解決

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

とはいえ、その他のユーティリティ関数のコレクションであるパッケージがいくつかあります。 Hmiscgregmisc, 、だからそのようなことをしても大丈夫です。そのようないくつかの機能がある場合、MISCパッケージの著者に連絡し、パッケージにコードを含めることができるかどうかを確認する価値があるかもしれません。

きれいなコードを書くことに関しては、あなたができる最も重要なことは使用することです スタイルガイド.

他のヒント

私は使うだろう http://r-forge.r-project.org/. 。ページの上から:

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

私の意見では、このタイプの素材をパッケージにすることは良い考えではありません。
その他のパッケージ 存在しますが、主に歴史的な理由や権威ある貢献者のために、フランク・ハレル・フミスクを参照してください。

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

  1. CRANのみに7000個のパッケージがあります。特定のフィールドをターゲットにしない場合、パッケージが選択される可能性は低く、これが起こったとしても、他の確立されたパッケージが同じことをする可能性が非常に高いです。したがって、パッケージは、それが扱う問題に対するオリジナル/より良い解決策も備えている必要があります。

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

  3. Rリポジトリはコンテンツをマスクする傾向があります。ハイテクブログとは反対に、機能のソースはすぐには表示されません。個別のソースパッケージをダウンロードする必要がありますが、パッケージ構造のために多くのオーバーヘッドがあります。これは、表示することをいとわない実際の機能を埋め込み、他の関数を読む必要があります。

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

  1. Syntaxのハイライトの快適さですぐにそれらを読み取ります。それらが興味深い場合は、Rで貼り付けて試してみて、おそらくそれらを維持することができます。そうしないと、次の関数を読むために簡単に乗り越えます。

  2. コードを整理する可能性がありますが、実際のパッケージのすべての制約はありません。同様の関数は、同じファイルと同じサブフォルダーのコヒーレントファイルに移動する場合があります。

  3. あなたのアイデアを簡単な方法で他の人に見せることができます。 ReadMeファイルは、すぐに一種のミニWebページになる可能性があります(Markdown経由)。比較すると、クランは非常に剛性があります。

他にも多くの利点(改訂履歴、貢献の受け入れ、githubページ)がありますが、それはあなたに興味があるかもしれません。

もちろん、いくつかの機能が安定したコヒーレントな方向に成長した後、それらを実際のクランパッケージに変えます。また、それらを試すためのコピーと貼り付け方法が不便になるためです。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top