跟进:消除 R 中 2 个向量的部分重叠部分



我想删除字符向量中与f1元素部分(不完全)重叠的字符向量n1部分。

例如,在n1中,我们看到"study_typecompare""study_typecontrol"f1中的study_type部分重叠。

因此在desired_output中,我们要去掉其中"study_type"部分。因为其他元素(例如factor(v_gi))n1f1中的元素完全重叠或不存在(例如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"    

最新更新