簡體   English   中英

R:從函數內部將Plot.ly打印到RMarkdown HTML中

[英]R: Print Plot.ly into RMarkdown HTML from within a function

我有一個文檔,該文檔加載一些文件,對其進行處理,然后將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對象直接返回到文檔中時才似乎工作。 到目前為止,我還沒有找到一種在不將其硬編碼到文檔中的情況下使用它的方法,這是不理想的。

我有同樣的問題。 在尋找解決方案並沒有找到解決方案之后,我想出了自己的解決方案。 有點hack,但是可以用:

1)通過<<-將函數中的plotly對象設置為全局變量。 我每個函數有一個以上的可繪制對象,因此返回它們不起作用(我嘗試過)。 2)展開循環(在我看來是可行的,因為只有5次迭代)3)調用全局繪圖var

有一個簡單的辦法解決這是與此相關的帖子

為了允許對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並將繪圖圖保存到此列表中,然后進行打印。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM