我有脚本,我想替换##
指示的一组字符串 script <- c("This is #var1# with a mean of #mean1#")
我的键值列表是:
pairs <- list(
list("#var1#", "Depression"),
list("#mean1#", "10.1")
)
我的循环看起来像这样并完成它的工作。
for (pair in pairs) {
script <- gsub(pair[[1]], pair[[2]], script)
}
但是,是否有人知道如何使用循环来解决没有的问题?
答案 0 :(得分:1)
我认为通过一些更改,您可以使用glue
包。更改涉及使用data.frame
存储您的键值,并稍微调整文本的格式。
library(glue)
tt <- 'This is {var1} with a mean of {mean1}'
dat <- data.frame(
'var1' = c('Depression', 'foo'),
'mean1' = c(10.1, 0),
stringsAsFactors = FALSE
)
glue(tt,
var1 = dat$var1,
mean1 = dat$mean1)
This is Depression with a mean of 10.1
This is foo with a mean of 0
答案 1 :(得分:1)
您可以使用 stringr 。
如?str_replace
中所述:
要在字符串的每个元素中执行多次替换,请传递a 命名向量(
c(pattern1 = replacement1)
)到str_replace_all
。
所以在你的情况下:
library(stringr)
str_replace_all(script, setNames(sapply(pairs, "[[", 2), sapply(pairs, "[[", 1)))
# [1] "This is Depression with a mean of 10.1"