[解決済み] 自分のパッケージの中でdata.tableパッケージを使用する
質問
私は自分のパッケージの中でdata.tableパッケージを使用しようとしています。 MWEは次のとおりです。
私は、単に小さなdata.tableオブジェクトを作成し、次に"A"列によってグループ化された"Val"列を合計する関数、test.funを作成します。 コードは次のとおりです。
test.fun<-function ()
{
library(data.table)
testdata<-data.table(A=rep(seq(1,5), 5), Val=rnorm(25))
setkey(testdata, A)
res<-testdata[,{list(Ct=length(Val),Total=sum(Val),Avg=mean(Val))},"A"]
return(res)
}
この関数を通常のRセッションで作成し、関数を実行すると、期待通りに動作します。
> res<-test.fun()
data.table 1.8.0 For help type: help("data.table")
> res
A Ct Total Avg
[1,] 1 5 -0.5326444 -0.1065289
[2,] 2 5 -4.0832062 -0.8166412
[3,] 3 5 0.9458251 0.1891650
[4,] 4 5 2.0474791 0.4094958
[5,] 5 5 2.3609443 0.4721889
この関数をパッケージに入れ、パッケージをインストールし、パッケージをロードし、関数を実行すると、エラーメッセージが表示されます。
> library(testpackage)
> res<-test.fun()
data.table 1.8.0 For help type: help("data.table")
Error in `[.data.frame`(x, i, j) : object 'Val' not found
なぜこのようなことが起こるのか、またそれを解決するために何ができるのか、どなたか説明していただけませんか。 どんな助けでも非常に感謝します。
どのように解決するのですか?
Andrieの推測は正しく、+1です。 それに関するFAQがあります(
vignette("datatable-faq")
を参照)、また、新しい
ヴィネット
のインポートに関する
data.table
:
FAQ 6.9: data.tableに依存するパッケージを作りました。どのようにしたら からの継承が機能するように、私のパッケージがdata.tableを意識していることを確認するにはどうしたらよいですか。 どのようにすれば私のパッケージが data.table を認識し、data.frame からの継承が機能するようにできますか?
どちらか i) インクルード
data.table
の中にDepends:
フィールドに記述するか、または ii) DESCRIPTION ファイルのdata.table
を含める。Imports:
フィールドとimport(data.table)
というフィールドがあります。
さらなる背景...............の一番上にある
[.data.table
(そして他の
data.table
関数) を呼び出すと、その結果に応じてスイッチが表示されます。
cedta()
. これは Calling Environment Data Table Aware の略である。タイピング
data.table:::cedta
をタイプすると、それがどのように行われるかがわかります。呼び出し側のパッケージが名前空間を持ち、その名前空間がImport'or Depend'on
data.table
. これは
data.table
に渡すことができます。
data.table-awareに渡すことができます。
パッケージ(例えば
base
の関数など) があり、それらのパッケージは絶対的に標準的な
[.data.frame
の構文を使うことができます。
data.table
を実装していることに気づかないまま
data.frame
is()
a
data.table
も、あります。
これもまた、なぜ
data.table
継承が以前は名前空間のないパッケージと互換性がなく、ユーザーの要求に応じて、そのようなパッケージの作者に、互換性を保つためにパッケージに名前空間を追加するように頼まなければならなかった理由もここにあります。幸いなことに、R は (v2.14.0 から) 名前空間がないパッケージに対してデフォルトの名前空間を追加しており、この問題は解消されています。
R バージョン 2.14.0 での変更点
* すべてのパッケージは名前空間を持つ必要があり、ソースで提供されていない場合、インストール時に作成されます。
関連
-
R: hclust(d, method = method)でのエラー : 外部関数呼び出しは NA/NaN/Inf(arg10) を持つことができません。
-
R - よくあるエラーとその原因 - 注意事項
-
[解決済み] lm.fit(x,y,offset = offset, singular.ok,...) 0 非NAケースでboxcox式で計算するとエラーになる。
-
[解決済み] データフレーム列の名前によるドロップ
-
[解決済み] リストやデータフレームの要素にアクセスするためのブラケット[ ]とダブルブラケット[[ ]]の違いについて
-
[解決済み] Rでtrycatchの書き方
-
[解決済み] ggplot2 の棒グラフで棒を並べる
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
-
[解決済み】data.tableで名前を指定してカラムを削除する方法は?
-
[解決済み】R関数でオプション引数を指定する "正しい "方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
R言語エラー:図の余白が大きすぎる 解決方法
-
R plot.new() のエラー : 図形の余白が大きすぎる
-
[解決策】 plot.new() のエラー:図の余白が大きすぎる。
-
[解決済み] HTML、PDF、DOCXで見栄えのするシンプルな手動のRMarkdownテーブル
-
[解決済み] 文字列ベクトルを代入して、列名を持つ空のデータフレームを作成する?重複
-
[解決済み] Rでcは何をするのですか?重複] [重複
-
[解決済み] 情報を損なわずに因数を整数値に変換するには?
-
[解決済み] リストやデータフレームの要素にアクセスするためのブラケット[ ]とダブルブラケット[[ ]]の違いについて
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
-
[解決済み】私のggplot2構文が賢明であるときに、R CMDチェック「no visible binding for global variable」注記を処理するにはどうすればよいですか?