使用highcharter在循环中绘制的Markdown R

4
我希望您能够使用 highcharter 库 编写循环以绘制各种图表,但我遇到了一些问题。我的代码如下所示:

在此处上传文件并将所有 NA 值转换为 "na" 字符串。

DT <- fread(file, sep='auto',na.strings=c("Na","-",""), blank.lines.skip=TRUE, stringsAsFactors = FALSE)
DTT <- DT
```

```{r, echo=F, results='asis'}
for(i in seq_along(DTT)) {
  DTT[[i]] <- sapply(DTT[[i]], function(x) if(is.na(x)) x <- "na" else x <- x)
  DTT[[i]] <- as.factor(DTT[[i]])
}

我尝试循环执行:

for(i in seq_along(DTT)) {

      hc <- highchart() %>%
        hc_title(text = 'prueba',
                 style = list(fontSize = "15px")) %>% 
        hc_chart(type = 'pie') %>% 
        hc_xAxis(categories = DTT[[i]]) %>% 
        hc_add_series(DTT[[i]], name = "Market", showInLegend = FALSE)
        hc
    }

我试着编写了一个函数并通过循环来调用它,但都没有成功。

最后,我尝试使用 lapply 函数 对数据框的所有列应用 plot 函数,但也没有成功。可能是我没有正确使用 lapply 这个过程。

gethc <- function(DT) {
  hc <- highchart() %>%
    hc_title(text = 'prueba',
             style = list(fontSize = "15px")) %>% 
    hc_chart(type = 'pie') %>% 
    hc_xAxis(categories = DT) %>% 
    hc_add_series(DT, name = "Market", showInLegend = FALSE)
    hc
}

lapply(DTT, gethc)

我找到了一个相关的内容:使用highcharter在循环中绘图

在循环中需要使用print,因为自动打印被关闭了,但是它没有打印任何东西。

示例:

DT <- mtcars
for(i in seq_along(DT)) {
  DT[[i]] <- sapply(DT[[i]], function(x) if(is.na(x)) x <- "na" else x <- x)
}

gethc <- function(i) {
  hc <- highchart() %>%
    hc_title(text = 'prueba',
             style = list(fontSize = "15px")) %>% 
    hc_chart(type = 'pie') %>% 
    hc_xAxis(categories = DT[[i]]) %>% 
    hc_add_series(DT[[i]], name = "Market", showInLegend = FALSE)
    print(hc)
}

for(i in seq_along(DT)) {
  gethc(i)
} 

这个程序在.R文件中可以正常运行,但在R Markdown文件中却无法正常工作。

如果有人能提供解决此问题的方案,将会非常有帮助。


那么使用 print(hc) 而不是 hc 是不起作用的吗?你能给我们一个可行的重现例子吗?你是想创建许多图表吗?因为每次都在覆盖 hc。它在您(可能)的 RMarkdown 文档之外是否有效(即在正常的干净会话中)? - Axeman
是的,在普通的.R中它可以正常工作并且绘图完美,但在Markdown中它根本不起作用,如果您想要,我可以发送给您代码。 - Programmer Man
如果您提供一个简单且完全可重现的示例,那么您的问题更有可能得到答案。 - Axeman
我添加了一个示例,第一个for循环是可选的,它只查找空值并在其中添加字符串"na"。 - Programmer Man
1个回答

4

看起来在R MarkDown中没有办法使用循环打印highcharter图表,但是我发现了一种方法,可以使用htmltools创建一组highcharter图表,并将它们发送到tagList中,幸运的是现在可以正确地打印所有内容。

DT <- mtcars
gethc <- function(i) {
  hc <- highchart() %>%
    hc_title(text = 'prueba',
             style = list(fontSize = "15px")) %>% 
    hc_chart(type = 'pie') %>% 
    hc_xAxis(categories = DT[[i]]) %>% 
    hc_add_series(DT[[i]], name = "Market", showInLegend = FALSE)
    hc
}
a = list()
for(i in seq_along(DT)) {
  a[[i]] <- gethc(i)

}

htmltools::tagList(a) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接