R data.tableに複数の列を1つの関数呼び出しで追加しますか?
2023-08-15 18:59:42
質問
私はリストで2つの値を返す関数を持っています。両方の値は、2つの新しい列でdata.tableに追加される必要があります。関数の評価はコストがかかるので、私は関数を2回計算することを避けたいと思います。以下はその例です。
library(data.table)
example(data.table)
DT
x y v
1: a 1 42
2: a 3 42
3: a 6 42
4: b 1 4
5: b 3 5
6: b 6 6
7: c 1 7
8: c 3 8
9: c 6 9
ここに私の関数の例があります。計算コストがかかる上に、与えられた他の値から一つの返り値を推論する方法がない(下の例のように)と言ったことを思い出してください。
myfun <- function (y, v)
{
ret1 = y + v
ret2 = y - v
return(list(r1 = ret1, r2 = ret2))
}
これは、1つのステートメントで2つのカラムを追加する私の方法です。しかし、これはmyfunを2回呼び出す必要があります。
DT[,new1:=myfun(y,v)$r1][,new2:=myfun(y,v)$r2]
x y v new1 new2
1: a 1 42 43 -41
2: a 3 42 45 -39
3: a 6 42 48 -36
4: b 1 4 5 -3
5: b 3 5 8 -2
6: b 6 6 12 0
7: c 1 7 8 -6
8: c 3 8 11 -5
9: c 6 9 15 -3
これを行う方法について何か提案はありますか?私は保存することができます
r2
を別の環境に保存することができますが、私はただ一度に参照によって2つの列を追加する方法が必要です。
どのように解決するのですか?
では
data.table
v1.8.3 では、このようにすることができます。
DT[, c("new1","new2") := myfun(y,v)]
もう一つの方法は、関数の出力を保存して、列を一つずつ追加していく方法です。
z <- myfun(DT$y,DT$v)
head(DT[,new1:=z$r1][,new2:=z$r2])
# x y v new1 new2
# [1,] a 1 42 43 -41
# [2,] a 3 42 45 -39
# [3,] a 6 42 48 -36
# [4,] b 1 4 5 -3
# [5,] b 3 5 8 -2
# [6,] b 6 6 12 0
関連
-
RStudio の "plot.new() : figure margins too large" 問題を解決する。
-
二項演算子への非数値引数を報告するR言語エラー
-
R read.table Error:埋め込まれたヌルが含まれているようです。
-
データボックス内の行/列の削除/追加を行うR言語
-
[解決済み] "エラーです。Rでテーマの書式を保存する際に「Don't know how to add RHS to the theme object」(テーマオブジェクトにRHSを追加する方法がわかりません)と表示されます。
-
[解決済み] パッケージ 'xxx' は利用できません (for R version x.y.z) 」という警告にどのように対処したらよいですか?
-
[解決済み] ggplotで凡例のタイトルを変更する方法
-
[解決済み] ベクトル中のある要素のインデックスを求めるR関数はありますか?
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
-
[解決済み] data.tableのカラムで文字列を分割する
最新
-
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] is.data.frame(x) のエラー : (リスト) オブジェクトを 'double' 型に強制できない。
-
[解決済み] Rデータフレームから要因(文字列)に応じて行を抽出する。
-
[解決済み] lm.fit(x,y,offset = offset, singular.ok,...) 0 非NAケースでboxcox式で計算するとエラーになる。
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] グループ化関数(tapply、by、aggregate)と*applyファミリ
-
[解決済み] 非常に大きなテーブルをデータフレームとして高速に読み込む
-
[解決済み] データフレーム内のランダムな行をサンプリングする
-
[解決済み】ggplot2で軸のタイトルやラベルの大きさを変更する。
-
[解決済み] data.tableで:=を使用してグループ別に複数のカラムを割り当てる