4

の速度から得るが、そのデータ構造や構文を使用しないようにするために、data.table分割適用結合 ( など) を使用するための単純なラッパーを作成しようとしています。私は以下を試しました。aggregateddplydata.table

fold = function(df, by, ...)
{
    library(data.table)
    dt = data.table(df)
    dt = dt[, eval(substitute(list(...))), by]
    df = as.data.frame(dt)
    return(df)
}

a = data.frame(x=c(1,1,1,2,2,2), y=runif(6))
b = fold(a, "x", y_min=min(y), y_max=max(y))
print(a)
print(b)

これは、スクリプトとそれに入れるとうまくsource機能しますが、その関数をパッケージに入れ、インストールして使用しようとすると、

Error in eval(expr, envir, enclos) : object 'y' not found
Calls: fold -> [ -> [.data.table -> [.data.frame -> eval -> eval

一般的にこれを試す以外に、私は何を間違っていますか?

4

1 に答える 1

1

コメントに続いて、FAQ 6.9 はこれに答えました:

FAQ 6.9 data.table に依存するパッケージを作成しました。data.frame からの継承が機能するように、パッケージが data.table-aware であることを確認するにはどうすればよいですか?
特別なことをする必要はありません。パッケージの DESCRIPTION ファイルの または フィールドにdata.table含めるImports:だけです。Depends:

からの継承がとのdata.frame完全な互換性を維持する方法の技術的な詳細は、次の[.data.frameとおりです。

自分のパッケージ内で data.table パッケージを使用する

于 2013-03-15T13:22:02.237 に答える