从字符串列表中创建公式

要求

我有以下代码将字符串解析为名为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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章