我有以下代码将字符串解析为名为dag_str2
. 它以嵌套列表的形式出现,我希望它只是一个常规列表。
dag_str <- "dag{D<-{G}; A<-{D}; A<-{G}; A<-{Q}}"
dag_str2 <- gsub("dag|\\{|\\}|[[:space:]]","", dag_str) %>%
str_split(";")
dag_str2
[[1]]
[1] "D<-G" "A<-D" "A<-G" "A<-Q"
我希望输出是这样的公式列表输出:像这样的列表
"D~G" "A~D+G+Q"
我怎样才能在 R 中做到这一点?
您可以继续解析dag_str2
您的公式以创建公式表示法。
library(dplyr)
library(tidyr)
df <- tibble(str = unlist(dag_str2)) %>%
separate(str, c("lhs", "rhs"), sep = "<-") %>%
group_by(lhs) %>%
summarize(rhs = paste(rhs, collapse = "+"), .groups = "drop") %>%
mutate(f = paste(lhs, rhs, sep = "~"))
如果需要,您可以从这里轻松转换为实际公式。
lapply(df$f, as.formula)
# [[1]]
# A ~ D + G + Q
# <environment: 0x000001af8db7fa20>
#
# [[2]]
# D ~ G
# <environment: 0x000001af8db7fa20>
根据评论编辑
这是提取要为其构建拦截的术语的一种方法。
只有一个新行,bind_rows()
。这会为 RHS 中但不在 LHS 中的术语添加行。
df <- tibble(str = unlist(dag_str2)) %>%
separate(str, c("lhs", "rhs"), sep = "<-") %>%
bind_rows(tibble(lhs = setdiff(.$rhs, .$lhs),
rhs = "1")) %>%
group_by(lhs) %>%
summarize(rhs = paste(rhs, collapse = "+"), .groups = "drop") %>%
mutate(f = paste(lhs, rhs, sep = "~"))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句