我想删除字符向量中与f1
元素部分(不完全)重叠的字符向量n1
部分。
例如,在n1
中,我们看到"study_typecompare"
和"study_typecontrol"
与f1
中的study_type
部分重叠。
因此在desired_output
中,我们要去掉其中"study_type"
部分。因为其他元素(例如factor(v_gi)
)n1
与f1
中的元素完全重叠或不存在(例如intrcpt
)在f1
中,我们保持它们不变。
是否可以在 BASE R 或整理中获得我的desired_output
(如下)?
我已经尝试了以下方法,但它错误地从factor(v_gi)
内部删除了v_gi
:
f1 <- gi ~ factor(v_gi) + study_type
n1 <- c("intrcpt","factor(v_gi)","study_typecompare","study_typecontrol")
fun1 <- function(fmla, vec) {
v1 <- all.vars(fmla)
v2 <- setdiff(vec, v1)
v3 <- sub(paste(v1, collapse = "|"), "", v2)
vec[vec %in% v2] <- v3
vec
}
# EXAMPLE OF USE:
fun1(f1, n1)
# Current Output:
[1] "intrcpt" "factor()" "compare" "control" ## Notice `factor()` has errounousely lost its`v_gi`
desired_output = c("intrcpt","factor(v_gi)","compare","control")
在setdiff
行之后,paste
^
作为字符串的前缀,因此在sub
中它只匹配开头。
fun1 <- function(fmla, vec) {
v1 <- all.vars(fmla)
v2 <- setdiff(vec, v1)
v1 <- paste0('^', v1)
v3 <- sub(paste(v1, collapse = "|"), "", v2)
vec[vec %in% v2] <- v3
vec
}
fun1(f1, n1)
# [1] "intrcpt" "factor(v_gi)" "compare" "control"