Есть ли функция, которая может быть альтернативой вставке? Я хотел бы знать, существует ли что-то подобное в R:
> buildString ( "Hi {1}, Have a very nice {2} ! " , c("Tom", "day") )
Есть ли функция, которая может быть альтернативой вставке? Я хотел бы знать, существует ли что-то подобное в R:
> buildString ( "Hi {1}, Have a very nice {2} ! " , c("Tom", "day") )
frankc и DWin имеют право указывать на sprintf().
Если по какой-то причине ваши запасные части действительно будут в форме вектора (т.е. c("Tom", "day")), вы можете использовать do.call(), чтобы передать их в sprintf():
string <- "Hi %s, Have a really nice %s!"
vals <- c("Tom", "day")
do.call(sprintf, as.list(c(string, vals)))
# [1] "Hi Tom, Have a really nice day!"
Функция sprintf - это один из подходов, о котором говорили другие, вот еще один подход с использованием пакета gsubfn:
> library(gsubfn)
> who <- "Tom"
> time <- "day"
> fn$paste("Hi $who, have a nice $time")
[1] "Hi Tom, have a nice day"
Я думаю, что вы ищете sprintf.
В частности:
sprintf("Hi %s, Have a very nice %s!","Tom","day")
Пакет whisker делает это очень хорошо и заслуживает более широкой оценки:
require(whisker)
whisker.render ( "Hi {{name}}, Have a very nice {{noun}} ! " , list(name="Tom", noun="day") )
С версией 1.1.0 (выпуск CRAN в 2016-08-19) пакет stringr получил функцию интерполяции строк str_interp().
С str_interp() возможны следующие варианты использования:
Переменные, определенные в среде
v1 <- "Tom"
v2 <- "day"
stringr::str_interp("Hi ${v1}, Have a very nice ${v2} !")
#[1] "Hi Tom, Have a very nice day !"
Переменные, предоставленные в именованном списке в качестве параметра
stringr::str_interp(
"Hi ${v1}, Have a very nice ${v2} !",
list("v1" = "Tom", "v2" = "day"))
#[1] "Hi Tom, Have a very nice day !"
Переменные, определенные в векторе
values <- c("Tom", "day")
stringr::str_interp(
"Hi ${v1}, Have a very nice ${v2} !",
setNames(as.list(values), paste0("v", seq_along(values)))
)
#[1] "Hi Tom, Have a very nice day !"
Обратите внимание, что вектор value может хранить только данные одного типа (список более гибкий), и данные вставляются в том порядке, в котором они указаны.