我想知道是否有可能洗掉n1字符向量中與公式中的元素部分重疊的部分f1。
例如,在 中n1,我們看到"chyes"&"bmi:chyes"與chin部分重疊f1。
因此,在 中desired_output,我們要洗掉其中的"ch"一部分。因為在其他元素n1要么在一個元素完全重疊f1(例如,bmi)或不存在f1(例如。intrcpt),我們讓他們保持不變。
我嘗試了以下解決方案,但無法獲得所需的輸出。
desired_output在 BASER或 tidyvesrse獲得我的可能嗎?
f1 <- yi~ bmi*ch
n1 <- c("intrcpt","bmi","chyes","bmi:chyes")
desired_output <- c("intrcpt","bmi","yes","bmi:yes")
### Current unsuccessful solution:
foo <- 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
}
### EXAMPLE OF USE:
foo(f1, n1)
# "intrcpt" "bmi" "chyes" "bmi:chyes"
uj5u.com熱心網友回復:
這個函式可以做你想做的事,但我同意@Onyambu 的觀點,值得考慮你的潛在問題是否真的需要字串操作。
f <- function(fm, nm) {
vars <- vapply(attr(terms(fm), "variables"), deparse, "")[-1L]
subpat <- paste0(gsub("([()])", "\\\\\\1", vars), collapse = "|")
l <- rapply(strsplit(nm, ":"), sub, how = "list",
pattern = sprintf("^(%s)(. )$", subpat), replacement = "\\2")
vapply(l, paste0, "", collapse = ":")
}
fm1 <- yi ~ bmi * ch
nm1 <- c("intrcpt", "bmi", "chyes", "bmi:chyes")
f(fm1, nm1)
[1] "intrcpt" "bmi" "yes" "bmi:yes"
fm2 <- yi ~ bmi * factor(ch)
nm2 <- c("intrcpt", "bmi", "factor(ch)yes", "bmi:factor(ch)yes")
f(fm2, nm2)
[1] "intrcpt" "bmi" "yes" "bmi:yes"
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/401066.html
下一篇:從向量中提取字符元素
