2016-09-16 35 views
0

我有一个文件加载一些文件,处理它们,然后将Plot.ly图打印到文档中。除了尝试在另一个函数或循环中调用绘图函数之外,一切都可行。这里是我的代码结构:R:从功能内将Plot.ly打印成RMarkdown HTML

```{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'd,但Plot.ly似乎并不像这样工作,它似乎只在Plot.ly对象直接返回到文档中时才起作用。到目前为止,我还没有想出一种方法来使用它,而不将其硬编码到文档中,这并不理想。

+0

尝试一个函数返回一个列表:'Map(function(x,y,z)my_plotly_function x,header = y,sep = z),sample_file_list,TRUE,'\ t')' – Shape

+0

我试过了,虽然它在RStudio中工作,但编织RMD文档时不会在HTML中输出绘图。事实上,我查看了HTML源代码,并且情节根本就不存在。我可以看到文档其他方面的JavaScript元素的源代码,但不能看到这些图。 – user5359531

回答

0

我有完全相同的问题。在寻找解决方案并找不到一个解决方案后,我想出了一个解决方案。这是有点破解,但它的工作原理:

1)通过< < - 将功能内的对象设置为全局变量。每个函数有不止一个阴谋对象,所以返回它们不起作用(我试过)。 2)展开循环(在我的情况下可行,因为只有5次迭代) 3)调用全局图var