4

私は関数の作成に慣れていないので、うまくいけば、以下がある程度の意味を持ちます。

data.frame のサブセット化に使用されるいくつかの引数を取る関数を作成したいと考えています。フォーラム全体を検索したところ、これらの Q&A は興味深いものでしたが、ディスカッションから質問に答えることができませんでした:

作成したい関数は、df、列名、および列名の行で一致する値を取ります。間違っていることがわかる私の試みは次のとおりです。

x <- data.frame("col1"=c("email","search","direct"),
            "col2"=c("direct","email","direct"),
            "col3"=c(10,15,27))

fun <- function(df,col,val) {
  result <- subset(df, col==val)
  return(result)
}

df、x を渡したい。列名、たとえば「col2」としましょう。値、たとえば「メール」としましょう。そうしようとすると、長さ 0 の df が返されます。

fun(x,"col2","email")

明らかに私は何か間違ったことをしています...誰か助けてくれますか?

4

1 に答える 1

3

次のようなことをしたいでしょう:

df[df[[col_name]] == value,]

関数は次のようになります。

fun <- function(df, col_name, value) {
  df[df[[col_name]] == value,]
}
fun(x, 'col2', 'email')
    col1  col2 col3
2 search email   15

また、論理ベクトルで NA 値を考慮したい場合:

fun <- function(df, col_name, value) {
  logical_vector = df[[col_name]] == value
  logical_vector[is.na(logical_vector)] = FALSE
  df[logical_vector, drop = FALSE]
}

あなたの例がうまくsubsetいかないのは、 の値の中を見ないからですcol。代わりに、 という列を探しますcolvalパラメータも正しく解析されていないと思われます。subsetこれは、非対話モード、つまり対話型の R コンソール以外では使用しない理由の 1 つです。

于 2013-06-10T11:30:04.547 に答える