テストする列の名前がわからない場合、subset
関数をどのように使用するのか疑問に思っています。シナリオは次のとおりです。ユーザーがデータテーブルをフィルター(サブセット)する変数を選択できるShinyアプリがあります。入力としてwebappから列名を受け取り、次のようにその列の値に基づいてサブセット化します。
subset(myData, THECOLUMN == someValue)
THECOLUMN
とsomeValue
の両方が変数である場合を除きます。目的の列名を文字列として渡すための構文はありますか?
列名を保持する変数ではなく、列名であるベアワードが必要なようです。
これが、subset
がインタラクティブな使用以外の悪いツールである理由です。
d <- data.frame(x = letters[1:5],y = runif(5))
> d[d[,'x'] == 'c',]
x y
3 c 0.3080524
基本的に、Rでの抽出は[
を中心に構築されます。これを使って。
subset
とwith
は両方ともインタラクティブに使用するように設計されており、他の機能内での使用に対する警告はヘルプページに記載されています。これは、データ引数の名前から構築された環境内の式としての評価引数の戦略に由来します。そうでなければ、これらの列/要素名は、Rセンスの「オブジェクト」ではありません。
THECOLUMN
が値が列の名前であるオブジェクトの名前であり、someValue
が値がターゲットであるオブジェクトの名前である場合、以下を使用する必要があります。
dfrm[ dfrm[[THECOLUMN]] == someValue , ]
「[[」がその引数を評価するという事実は、プログラミングに関して「$」よりも優れている理由です。 joranの例を使用する場合:
d <- data.frame(x = letters[1:5],y = runif(5))
THECOLUMN= "x"
someValue= "c"
d[ d[[THECOLUMN]] == someValue , ]
# x y
# 3 c 0.7556127
したがって、この場合、これらはすべて同じアトミックベクトルを返します。
d[[ THECOLUMN ]]
d[[ 'x' ]]
d[ , 'x' ]
d[, THECOLUMN ]
d$x # of the three extraction functions: `$`, `[[`, and `[`,
# only `$` is unable to evaluate its argument
次のワンライナーを使用できると思います。
myData[ , grep(someValue, colnames(myData))]
どこ
colnames(myData)
すべての列名を含むベクトルを出力し、
grep(someValue, colnames(myData))
列を指す長さ1の数値ベクトル(列名が一意である場合)になります。見る ?grep
Rでのパターンマッチングに関する情報.