[解決済み] data.frameのカラム名を関数に渡す
2022-05-06 21:06:07
質問
data.frameを受け取る関数を書こうとしているのですが(
x
) と
column
を取得します。この関数は x に対していくつかの計算を行い、後で別の data.frame を返します。列名を関数に渡すためのベストプラクティスのメソッドに行き詰っています。
2つの最小限の例
fun1
と
fun2
に対して操作を行えるようになり、望ましい結果が得られます。
x$column
を使用しています。
max()
を例として挙げました。しかし、どちらも一見(少なくとも私には)エレガントとは言い難い
-
を呼び出す
substitute()
と、場合によってはeval()
- 列名を文字ベクトルとして渡す必要があること。
fun1 <- function(x, column){
do.call("max", list(substitute(x[a], list(a = column))))
}
fun2 <- function(x, column){
max(eval((substitute(x[a], list(a = column)))))
}
df <- data.frame(B = rnorm(10))
fun1(df, "B")
fun2(df, "B")
として関数を呼び出せるようにしたい。
fun(df, B)
といった具合に。他のオプションも検討しましたが、試していません。
-
パス
column
をカラム番号の整数値で指定します。これによってsubstitute()
. 理想的には、この関数はどちらかを受け入れることができます。 -
with(x, get(column))
が、しかし、仮にうまくいったとしても、これにはsubstitute
-
を使用します。
formula()
とmatch.call()
どちらもあまり経験がないのですが。
サブクエスチョン
: です。
do.call()
よりも優先される
eval()
?
解決方法は?
カラム名を直接使用すればいいのです。
df <- data.frame(A=1:10, B=2:11, C=3:12)
fun1 <- function(x, column){
max(x[,column])
}
fun1(df, "B")
fun1(df, c("B","A"))
substituteやevalなどを使う必要はない。
目的の関数をパラメータとして渡すこともできます。
fun1 <- function(x, column, fn) {
fn(x[,column])
}
fun1(df, "B", max)
または
[[
も、一度に1つの列を選択する場合に有効です。
df <- data.frame(A=1:10, B=2:11, C=3:12)
fun1 <- function(x, column){
max(x[[column]])
}
fun1(df, "B")
関連
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pandasのカラム名のリネーム
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] 既存のDataFrameに新しい列を追加する方法は?
-
[解決済み] データフレーム列の名前によるドロップ
-
[解決済み] 関数のソースコードを見るにはどうしたらいいですか?
-
[解決済み] 空のdata.frameを作成する
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
-
[解決済み] [Solved] data.frameで全てまたは一部のNA(欠損値)を含む行を削除する。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
RStudio の "plot.new() : figure margins too large" 問題を解決する。
-
R - よくあるエラーとその原因 - 注意事項
-
ggplot2 からグリッドと背景色を削除する。
-
Rの警告 "条件の長さが1より大きいので、最初の要素しか使えない "に対する解決策
-
[解決済み] require()とlibrary()の違いは何ですか?
-
[解決済み] コマンドラインからRスクリプトを実行する
-
[解決済み] データフレーム内の列を名前でドロップする方法
-
[解決済み] Rで文字列から最後のn文字を抽出する
-
[解決済み】RでCRANミラーを選択する方法
-
[解決済み】ifelse()でDateオブジェクトがnumericオブジェクトにならないようにする方法