R:从函数中将Plot.ly打印到RMarkdown HTML中

时间:2016-09-16 20:45:53

标签: r knitr r-markdown plotly

我有一个文档加载一些文件,处理它们,然后将Plot.ly图打印到文档中。一切正常,除了试图在另一个函数或循环中调用绘图函数。这是我的代码的结构:

```{r, results='asis', echo=TRUE}
my_plotly_function <- function(my_dataframe, ... ){
    suppressPackageStartupMessages(library("plotly"))

    my_plot <- plot_ly(data = my_dataframe, x = Column1, y = Column2, mode = "markers")
    return(my_plot)
}

sample_file_list <- c("sample4_control.tsv", "sample4_sample5.tsv", "sample5_control.tsv")


# this works
my_plotly_function(read.delim(sample_file_list[1],header = TRUE,sep = '\t'))

# this doesn't work
for(i in seq_along(sample_file_list)){
    my_plotly_function(read.delim(sample_file_list[i],header = TRUE,sep = '\t'))
}

# this does not work either
for(i in seq_along(sample_file_list)){
    print(my_plotly_function(read.delim(sample_file_list[i],header = TRUE,sep = '\t')))
}


# this also does not work
for(i in seq_along(sample_file_list)){
    my_plot <- my_plotly_function(read.delim(sample_file_list[i],header = TRUE,sep = '\t'))
    print(my_plot)
}
```

有什么想法吗?我知道在函数或循环中使用时,某些图需要print',但Plot.ly似乎不像这样工作,它只在返回Plot.ly对象时才起作用直接进入文件。到目前为止,我还没有找到一种方法来使用它而不将其硬编码到文档中,这是不理想的。

2 个答案:

答案 0 :(得分:0)

我遇到了完全相同的问题。在寻找解决方案而没有找到解决方案后,我想出了一个我自己的解决方案。它有点像黑客但它有效:

1)通过&lt;&lt; - 将函数内的图形对象设置为全局变量。每个函数我有多个图形对象,所以返回它们没有工作(我试过)。 2)展开循环(在我的情况下可行,因为只有5次迭代) 3)调用全局plot var

答案 1 :(得分:0)

有一个与此post相关的简单方法。

对帖子中给出的示例进行少许更改以允许调用plot_ly

library(plotly)
plot_plotly <- function(x) plot_ly(x=x)
l <- htmltools::tagList()
for (i in 1:3) {
  l[[i]] <- plot_plotly(rnorm(10))
}
l

关键是使用htmltools::tagList并将绘图图保存到此列表中,然后打印出来。