后续:消除R中2个向量的部分重叠部分
Follow-up: Eliminating partially overlapping parts of 2 vectors in R
我想删除 n1
字符向量中 部分(不完全)与 中的元素重叠的部分 f1
公式.
例如,在 n1
中,我们看到 "study_typecompare"
& "study_typecontrol"
与 f1
中的 study_type
部分重叠。
因此在desired_output
中,我们要删除其中的"study_type"
部分。因为 n1
中的其他元素(例如 factor(v_gi)
)与 f1
中的元素完全重叠或在 f1
中不存在(例如 intrcpt
),我们保持不变。
是否可以在 BASE R 或 tidyvesrse 中获取我的 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"
我想删除 n1
字符向量中 部分(不完全)与 中的元素重叠的部分 f1
公式.
例如,在 n1
中,我们看到 "study_typecompare"
& "study_typecontrol"
与 f1
中的 study_type
部分重叠。
因此在desired_output
中,我们要删除其中的"study_type"
部分。因为 n1
中的其他元素(例如 factor(v_gi)
)与 f1
中的元素完全重叠或在 f1
中不存在(例如 intrcpt
),我们保持不变。
是否可以在 BASE R 或 tidyvesrse 中获取我的 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"