ループなしでこれを行う簡単な方法はないようです。 my_query
内の各要素について、我々はTRUE
またはFALSE
を取得するには、以下の機能のいずれかを使用することができます。
f1 <- function (pattern, x) length(grep(pattern, x)) > 0L
f2 <- function (pattern, x) any(grepl(pattern, x))
例えば、
f1(my_query[1], my_data)
# [1] FALSE
f2(my_query[1], my_data)
# [1] FALSE
はその後、我々が適用する*apply
ループを使用して、すべてにf2
を言いますmy_query
の要素:
which(unlist(lapply(my_query, f2, x = my_data)))
# [1] 2
ありがとうございます、それはうまくいくようです。正直言って、私はあなたのワンラインオリジナルのバージョンを好みました。 *apply
で後で呼び出す別の関数を作成して編集した理由がわかりません。 which(lengths(lapply(my_query, grep, my_data)) > 0L)
と比較して利点はありますか?
まあ、私は完全にはわかりません。私は?lengths
を読んだとき:
One advantage of ‘lengths(x)’ is its use as a more efficient
version of ‘sapply(x, length)’ and similar ‘*apply’ calls to
‘length’.
私はどのように、はるかに効率的lengths
がsapply
と比較されていることを知りません。とにかく、それがまだループの場合、私の元の提案which(lengths(lapply(my_query, grep, my_data)) > 0L)
は2つのループを実行しています。私の編集は基本的に2つのループを組み合わせています。
あなたはまだ、単一のラインに私の新しい編集を手配することができます。コメントを拡張し
which(unlist(lapply(my_query, function (pattern, x) any(grepl(pattern, x)), x = my_data)))
または
which(unlist(lapply(my_query, function (pattern) any(grepl(pattern, my_data)))))
「sapply(my_query、grepl、x = my_data)」、「sapply(my_query、grepl、x = my_data)」のアイデア。あなたは 'which()'に2番目のものをラップすることができます。 – Gregor
ありがとう、グレゴール。私は2つの例が同じだと思う。また、それは私に行列を返します。私が考える行列の列番号を取得するには、そのような方法でそれをラップする必要があります。 – madmaxthc
残念ですが、2番目は 'sapply(my_query、function(q)任意の(grepl(q、my_data))) 'につながる任意の(grepl(q、my_data)))'を返します。しかし、多かれ少なかれZheyuanが投稿したもの。 – Gregor