我希望将已定义的变量插入到R中的字符串中,其中变量将插入多个位置。
我看到sprintf
可能有用。
所需输入的示例:
a <- "tree"
b <- sprintf("The %s is large but %s is small. %s", a)
理想输出会返回
"The tree is large but tree is small. tree"
我知道我可以使用这样的功能:
b <- sprintf("The %s is large but %s is small. %s",a,a,a)
然而,对于我的实际工作,我需要插入10次以上,所以我正在寻找更清洁/更简单的解决方案。
gsub会成为更好的解决方案吗?
我的确切问题已经在这里得到解答,但它是针对语言Go:
答案 0 :(得分:3)
1) 胶水我们可以使用glue
。除glue
glue::glue("The {s} is large but {s} is small. {s}", s = a)
#The tree is large but tree is small. tree
2 )语法语法类似于python中的f-string方法
a = "tree"
print(f"The {a} is large but {a} is small. {a}")
#The tree is large but tree is small. tree
类似于format
方法,但更具可读性
print("The {s} is large but {s} is small. {s}".format(s=a))
#The tree is large but tree is small. tree
答案 1 :(得分:3)
1)do.call 使用do.call
可以使用a
构建rep
个参数。没有包使用。
a <- "tree"
s <- "The %s is large but %s is small. %s"
k <- length(gregexpr("%s", s)[[1]])
do.call("sprintf", as.list(c(s, rep(a, k))))
## [1] "The tree is large but tree is small. tree"
2)gsub 评论中已经提到过这一点,但可以使用gsub
。同样,没有使用包。
gsub("%s", a, s, fixed = TRUE)
## [1] "The tree is large but tree is small. tree"
3)gsubfn gsubfn包支持准perl样式字符串插值:
library(gsubfn)
a <- "tree"
s2 <- "The $a is large but $a is small. $a"
fn$c(s2)
## [1] "The tree is large but tree is small. tree"
此外,反引号可用于包含整个R表达式,这些表达式在。
中进行求值和替换这可以与任何函数一起使用,而不仅仅是c
导致非常紧凑的代码。例如,假设我们想要在替换后计算s
中的字符数。然后就可以这样做:
fn$nchar(s2)
## [1] 38
答案 2 :(得分:2)
这是一个实际的sprintf()解决方案:
public sealed class Repository<T> : IRepository<T> where T : class {
private readonly ISession session;
public Repository(ISession session) {
this.session = session ?? throw new ArgumentNullException(nameof(session));
}
...
}
官方sprintf()文档中有更多示例。