2017-01-05 12 views
0

「Select Cases」メニューオプションを使用してSPSSで行う場合と同様に、データフレームをフィルタリングする単純な関数を定義します。このR関数の何が問題なのですか?

q3aが1の場合だけ保持したい場合は、サブセット関数を使用してフィルタリングするためにコンソールに入力するものを次に示します。subset(df, q3a==1)私は次の関数を使用する場合、これは問題なく実行し、Q3Aがしかし1

あるケースのみを含むデータフレームを返します、私はエラーを取得する:

filter <- function(frame, var, val) { 
    newFrame <- subset(frame, var==val) 
    return(newFrame) 
} 

私が実行しようとするとfilter(df, q3a, 1)、Rは私に以下のエラーを投げます:Error in eval(expr, envir, enclos) : object 'q3a' not found

ここに問題があるのはわかりません。関数がサブセット関数に引数を直接渡すだけで、明らかにそれは起こっていないようです。

+3

興味深いのはhttp://stackoverflow.com/questions/9860090/why-is-better-than-subset – user20650

+1

あなたは['filter'](https://cran.rstudio.com/)に気づいていますか? web/packages/dplyr/vignettes/introduction.html)から 'dplyr'を探していますか?可能であれば、既存のパッケージから関数を使用することをお勧めします。 – Hugh

+1

'filter(df、df $ q3a、1)'です。 –

答えて

0

組み込みのR関数のほとんどは、q3aのような引用符で囲まれていない引数をとり、それを文字列のように動作させます。

は、同じ機能を実現するために、これを試してみてください。

filter <- function(frame, var, val) { 
    return(frame[eval(substitute(var), frame)==val, ]) 
} 

お知らせ私は非標準的な評価and can make things very complicatedを使用する別のアプローチではなく、subsetを、使用しています。

関連する問題