3

置き換えたいさまざまなプレースホルダーを持つ文字列が与えられた場合、R には、パターンのベクトルと置換のベクトルが与えられた場合にそれらすべてを置き換える関数がありますか?

リストとループでそれを達成することができました

> library(stringr)    
> tt_ori <- 'I have [%VAR1%] and [%VAR2%]'
> tt_out <- tt_ori

> ttlist <- list('\\[%VAR1%\\]'="val-1", '\\[%VAR2%\\]'="val-2")
> ttlist
$`\\[%VAR1%\\]`
[1] "val-1"

$`\\[%VAR2%\\]`
[1] "val-2"

> for(var in names(ttlist)) {
+ print(paste0(var," -> ",ttlist[[var]]))
+ tt_out <- stringr::str_replace_all(string = tt_out, pattern =var, replacement = ttlist[[var]] )
+ }
[1] "\\[%VAR1%\\] -> val-1"
[1] "\\[%VAR2%\\] -> val-2"
> tt_out
[1] "I have val-1 and val-2"

同様の質問R: gsub, pattern = vector および replacement = vectorがありますが、異なる文字列をそれぞれ 1 つのパターンのみに置き換えることを求めています。ここでは、すべてのパターンを単一の文字列に置き換えることを探しています。

私が試してみました

> tt_ori <- 'I have VAR1 and VAR2'
> tt_out <- tt_ori
> ttdf <- data.frame(tt=c("VAR1", "VAR2"), val=c("val-1", "val-2"), stringsAsFactors = F)
> str(ttdf)
'data.frame':   2 obs. of  2 variables:
 $ tt : chr  "VAR1" "VAR2"
 $ val: chr  "val-1" "val-2"
> stringr::str_replace_all(string = tt_out, pattern =ttdf$tt, replacement = ttdf$val )
[1] "I have val-1 and VAR2" "I have VAR1 and val-2"

明らかに、出力は私が望むものではありません (複数の出力文字列、それぞれに 1 つの置換しかありません)。

関数がベースに存在するか、前に示したように呼び出され、単一の文字列ですべての置換を実行できる既知の CRAN パッケージに存在するかどうか疑問に思っていました。

誰かが私のループに対してより良い解決策や推奨事項を持っていますか、それとも関数に変換する必要がありますか?.

[注意] 文字列は、小さな Web ページ テンプレート、または構成ファイルである可能性があります。それらは小さいので、10 または 20 の置換のループを作成することは大したことではありませんが、より洗練されたソリューションを探しています。

4

2 に答える 2

1

試す

library(qdap)
 mgsub(c('[%VAR1%]' , '[%VAR2%]'), c('val-1', 'val-2'), tt_ori)
#[1] "I have val-1 and val-2"

データ

 tt_ori <- 'I have [%VAR1%] and [%VAR2%]'
于 2015-02-15T18:56:20.363 に答える