【问题标题】:Returning graph and dataframe object返回图形和数据框对象
【发布时间】:2021-12-11 03:53:27
【问题描述】:

我有以下代码,它将返回一个 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。或者也许只是返回一个对象,我可以使用 $ 从中获取特定元素。

【问题讨论】:

  • 一般来说,要从 R 中的函数返回不止一个东西。你需要返回一个list。例如:myfun &lt;- function() { ...lots of stuff...; return(list(thing1, thing2)) }

标签: r causality


【解决方案1】:

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) 列表 交替返回包含 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 

【讨论】:

    猜你喜欢
    • 2018-05-29
    • 2020-09-27
    • 1970-01-01
    • 2020-02-29
    • 2010-10-09
    • 2012-05-22
    • 2023-03-17
    • 2019-11-26
    • 2013-05-10
    相关资源
    最近更新 更多