2017-10-29 19 views
2

私はRとプログラミング全般に新しい経験があり、今では数時間にわたって以下のことに苦労しています。R:カスタム関数の変数として列名を渡す

変数としてdfと列名をとり、提供された列名に基づいてテーブルをフィルタリングし、出力を印刷する関数を作成しようとしています。動作しませんexample_function(df=example_df, col='percentage')を使用して

example_function <- function(df=df, col=col){ 
    a <- df[col == 100,] 
    b <- filter(df, col == 100) 
    print(a) 
    print(b) 
} 

は、両方の変数は単なる列名が、データのない行を返します(値== 100そこにいるにもかかわらず)。 example_function(df=df, col=percentage)を使用して

、その割合は、ここで引用符で囲まれていない、私が手:

Error in [.data.frame (df, col == 100,) : object 'percentage' not found

しかし、私はexample_function(df=example_df, col=example_df$percentage)を実行したとき、私はどこ行のみで期待通りの私のデータフレームを返すと、正しい結果を得ますは100に等しくなります。多くの場合、関数を再利用できるようにするために、毎回example_df$percentageと入力する必要なしに、1つの変数としてdfを、もう1つの列としてdfを渡すことが本当に欲しいです。冗長性があるような異なるデータフレームやタイピング私はその後、私はちょうど機能でdf$colを使用することができ、それがexample_df$percentageに評価し、それが上記のやったように動作することを考えて機能を変更しこれに基づき

example_function <- function(df=df, col=col){ 
    a <- df[df$col == 100,] 
    b <- filter(df, df$col == 100) 
    print(a) 
    print(b) 
} 

をしかし、今、私は別のエラーが出る使用してexample_function(df=example_df, col=percentage)またはcol='percentage'渡し:

Error in filter_impl(.data, quo) : Result must have length 19, not 0

は、すべてのボディがなぜ機能していない私がやっている理解するために私はこの問題を解決する助け、または右方向に私を指すことができるだろうか? (私の本当の1は、複数の列を持つことになりますが、私はそれがこの例の違いをすることはありません願っていますが。)ここで

本当にありがとうございました

は、私が使用しているデータフレームの一例である

name | percentage ----------------------- tom | 80 john | 100 harry | 99 elizabeth| 100 james | 50 ノートとして

example_df <- structure(list(name = structure(c(5L, 4L, 2L, 1L, 3L), .Label = c("elizabeth", "harry", "james", "john", "tom"), class = "factor"), percentage = c(80L, 100L, 99L, 100L, 50L)), .Names = c("name", "percentage"), class = "data.frame", row.names = c(NA, -5L))

  • 、私はCOLする=より正確に表すために、この例の割合を私COL =の名前を更新しました私がやっていること。この例を一般化しようとすると、私はcol =の名前を使用して、それが非常に良い例ではないことを認識しました(あなたは「名前」が決して数字ではないと主張しています)。しかし、上記の問題はまだ私のために残っています。

**アップデート:私はそれが次の作業を取得するために管理:

example_function <- function(df=df, col=col){ a <- df[df[col] == 100,] print(a) }

example_functionの最初の行が

a <- df[df[[col]] == 100,] 

ときでなければなりませんexample_function(df=example_df, col='percentage')

答えて

1

を渡しますあなたはそれを壊す、df[['names']] == 100よ与えるでしょうuのdfの行に対応する論理のリストは、namesの値が100です。しかし、'names' == 100は無意味です。常にfalseです。

+0

お返事ありがとうございます。あなたが提案したような関数を更新しましたが、別のエラーが発生しています:if(is.matrix(i))as.matrix(x)[[i]] else .subset2 (x、: オブジェクト 'names'が見つかりません – 0mm3

+0

@ 0mm3サンプルデータがないとわからないのですが、質問を編集して 'df'のサンプルを含めることはできますか? – lebelinoz

関連する問題