R语言如何将DAG字符串解析合并为指定格式的公式列表
R实现方法
方法1:tidyverse实现(和你现有代码逻辑兼容)
library(tidyverse) # 你的原有解析逻辑 dag_str <- "dag{D<-{G}; A<-{D}; A<-{G}; A<-{Q}}" dag_str2 <- gsub("dag|\\{|\\}|[[:space:]]","", dag_str) %>% str_split(";") %>% .[[1]] # 提取嵌套列表内的字符向量 # 转换为目标公式格式 result <- dag_str2 %>% str_split("<-", simplify = TRUE) %>% as.data.frame() %>% group_by(V1) %>% # 按公式左侧变量分组 summarise(formula_str = paste0(V1, "~", paste(V2, collapse = "+"))) %>% pull(formula_str)
运行后打印result即可得到预期输出:
> result [1] "D~G" "A~D+G+Q"
如果需要对同一个左侧变量对应的重复右侧变量去重,把paste(V2, collapse = "+")修改为paste(unique(V2), collapse = "+")即可。
方法2:纯base R实现(无需加载第三方包)
dag_str <- "dag{D<-{G}; A<-{D}; A<-{G}; A<-{Q}}" # 解析原始字符串 dag_str2 <- strsplit(gsub("dag|\\{|\\}|[[:space:]]","", dag_str), ";")[[1]] # 拆分左右变量 parts <- strsplit(dag_str2, "<-") lhs <- sapply(parts, `[`, 1) rhs <- sapply(parts, `[`, 2) # 按左侧变量分组拼接 result <- unname(tapply(rhs, lhs, function(x) { paste0(unique(lhs[lhs == names(x)[1]]), "~", paste(x, collapse = "+")) }))
内容的提问来源于stack exchange,提问作者Eisen
相关产品推荐
相关产品推荐

