R语言使用dagitty绘制DAG时如何同时返回数据框与图形对象
实现方案
R 基础的命名列表本身就支持$符号提取元素,你只需要在函数内先把绘图对象存储为变量,再和数据框一起放进命名列表返回即可。
修改后完整代码
library(dagitty) library(ggplot2) library(dplyr) library(ggdag) # 代码中用到的tidy_dagitty、geom_dag系列函数属于ggdag包,需提前加载 dag <- dagitty( "dag { Y <- X <- Z1 <- V -> Z2 -> Y Z1 <- W1 <-> W2 -> Z2 X <- W1 -> Y X <- W2 -> Y X [exposure] Y [outcome] }") tidy_dag <- tidy_dagitty(dag, layout = "fr") return_test <- function(tidy_df) { # 先将绘图结果存储为变量 p <- tidy_df %>% ggplot(aes(x = x, y = y, xend = xend, yend = yend)) + geom_dag_node() + geom_dag_text() + geom_dag_edges() + theme_dag() # 构造命名列表返回,原生支持$提取元素 result <- list( plot = p, tidy_dag = tidy_df ) # 直接调用函数时自动打印DAG图,不需要可删除该行 print(p) return(result) } # 调用示例 res <- return_test(tidy_dag)
使用方法
- 提取绘图对象:
res$plot,可直接打印、二次修改或用ggsave等函数保存 - 提取tidy格式DAG数据框:
res$tidy_dag
内容的提问来源于stack exchange,提问作者Eisen
相关产品推荐
相关产品推荐

