namez <- c("foo2003", "bar2340", "naught45")
patternz <- "03"
grepl("[patternz]$",namez)
それは動作しません。正規表現がpatternz変数の内容と一致するように、[patternz]を何に置き換える必要がありますか?
[編集]数字の「0」と「3」を別々に一致させるのではなく、文字列「03」を一致させたいことに注意してください。
ここで問題が何であるかを確認するのに苦労していることを認めなければなりません。例としては、
R> namez <- c("foo2003", "bar2340", "naught45")
R> patternz <- "03"
R> grepl(patternz, namez)
[1] TRUE FALSE FALSE
文字ベクトルと同様に必須でpatternz
あり、目的は0
& 3
と一致することではなく、リテラルと一致することです。"03"
文字列の最後でのみ一致させる必要がある場合は、"$"
手動で追加する必要があります。
R> patternz2 <- "03$"
R> grepl(patternz2, namez)
[1] TRUE FALSE FALSE
paste0()
または操作を介して
R> grepl(paste0(patternz, "$"), namez)
[1] TRUE FALSE FALSE
問題はpatternz
、実際の正規表現とベースR関数がこれを完全に処理するために使用することです。
の文字ベクトルを作成する必要があるようですがgrepl()
、使用paste0()
はうまくいくようですが、それほどエレガントではありません。
> grepl(paste0("[", patternz, "]$"), namez)
[1] TRUE TRUE FALSE
パッケージgsubfn
はあなたの友達です
library(gsubfn)
namez <- c("foo2003", "bar2340", "naught45")
patternz <- "03"
fn$grepl("[$patternz]$",namez)
#> fn$grepl("[$patternz]$",namez)
#[1] TRUE TRUE FALSE
もともと、文字列の最後に0または3を一致させたいと指定しました。あなたのコメントでは、おそらく「03」と一致させたいとほのめかしています。
fn$grepl("$patternz$",namez)
より適切でしょう。
また
fn$grepl("`patternz`$",namez)
$
この場合、は二重の意味を持つため、より適切な場合があります。