0

我有以下代码将返回 DAG 图:

library(dagitty)
library(ggplot2)

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) {
  
  tidy_df %>%
  ggplot(aes(x = x, y = y, xend = xend, yend = yend)) +
    geom_dag_node() +
    geom_dag_text() +
    geom_dag_edges() +
    theme_dag()
}

return_test(tidy_dag)

我想返回数据框和图表。我怎样才能做到这一点?本质上我想返回图表以及tidy_dag. 或者也许只是返回一个对象,我可以使用 $ 从中获取特定元素。

4

1 回答 1

0

1) 属性这将返回绘图,但将 dag 作为属性。

return_test2 <- 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()
  structure(p, dag = tidy_df$dag)
}

out <- return_test2(tidy_dag)
plot(out)
attr(out, "dag") # dag

一种变体是使用 this 作为结构语句返回带有绘图作为属性的 dag。

structure(tidy_df$dag, plot = p)

2) list交替返回一个包含 plot 和 dag 组件的列表。那是

return_test3 <- 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()
  list(plot = p, dag = tidy_df$dag)
}

out <- return_test3(tidy_dag)
plot(out$plot)
out$dag 
于 2021-10-25T17:15:58.950 回答