【发布时间】:2018-01-24 17:11:52
【问题描述】:
我正在尝试使用为我的变量预定义的标签使模型输出更漂亮。我有一个变量名向量 (a)、一个标签向量 (b) 和模型项 (c)。
我必须匹配向量 (a) 和 (c) 并将 (a) 替换为 (b)。我发现这个question 向我介绍了library(gsubfn) 包中的函数gsubfn。该函数匹配并替换多个字符串。按照他们的例子,在我的情况下它不能正常工作:
library(gsubfn)
a <- c("ecog.ps", "resid.ds", "rx")
b <- c("ECOG-PS", "Residual Disease", "Treatment")
c <- c("ecog.psII", "rxt2", "ecog.psII:rxt2")
gsubfn("\\S+", setNames(as.list(b), a), c)
[1] "ecog.psII" "rxt2" "ecog.psII:rxt2"
如果我使用特定的模式,那么它会起作用:
gsubfn("ecog.ps", setNames(as.list(b), a), c)
[1] "ECOG-PSII" "rxt2" "ECOG-PSII:rxt2"
所以我想我的问题是在函数gsubfn 中用作参数模式的正则表达式。我检查了这个R-pub 和Hadley 的book 的正则表达式。看来\S+ 就足够了。我尝试了其他正则表达式但没有成功:
gsubfn("[:graph:]", setNames(as.list(b), a), c)
[1] "ecog.psII" "rxt2" "ecog.psII:rxt2"
gsubfn("[:print:]", setNames(as.list(b), a), c)
[1] "ecog.psII" "rxt2" "ecog.psII:rxt2"
应在函数gsubfn 中使用哪种模式来匹配向量 (a) 和 (c) 并将 (a) 替换为 (b)?
【问题讨论】:
-
不,
\S+不是一个好的模式,它匹配的比你需要的多。确切的模式要求是什么?例如,尝试pat <- paste(a, collapse="|"),然后尝试gsubfn(pat, setNames(as.list(b), a), c)。 -
在您明确需要在哪些上下文中查找和替换之前,我无法提供解决方案(没有人可以)。
-
@WiktorStribizew,效果很好!谢谢你。我想我对字符类的理解不是很清楚。我的背景是我正在尝试使用为我的变量预定义的标签使模型输出更漂亮。因此,我使用
broom::tidy从数据集中提取变量名称(a),从我的数据集的属性中提取标签(b)和从 coxph 对象中提取模型项(c)。抱歉,不清楚。我将编辑我的问题。
标签: r regex gsub string-substitution gsubfn