我的数据框“ df ”看起来像这样
C1 C2 C3 C4
AA 10 ab 9
AA 11 ac 10
AA 12 ae 11
BB 10 ab 20
BB 11 ab 30
BB 12 ab 2
CC 10 ax 20
CC 12 ad 20
DD 17 ae 23
依旧...... 13000行。
在R Studio中,我能够以下列方式使用 C1 中的每个唯一值迭代地显示/生成单独的条形图:
abcd<-c('AA','BB','CC', 'DD')
## when using all of the data frame I plan to do : abcd<-df$C1
myfun<- function(j)
{
main<-paste("Printing ", abcd[j]," <br> (Hover for values) " )
df %>%
filter(C1==abcd[j])%>%
select(C1,C2,C3,C4) %>%
group_by(C1,C2,C3) %>%
summarise(value=sum(C4))-> new_df
p<-(plot_ly(new_df, x= ~C2, y = ~value, color = ~C3, type = "bar", alpha = 0.9) %>%
layout(title = main, xaxis = list(title ="", yaxis = list(title = "Test Title")))%>% layout(barmode = "stack"))
p
}
lapply(1:4, myfun)
我也可以使用for循环覆盖' abcd '来做同样的事情
这是我的Rmarkdown代码:
---
title: 'Apple bees'
author: "Krazzy R"
date: "28 March 2017"
output:
html_document:
highlight: pygments
pdf_document: default
theme: spacelab
pdf_document: default
word_document: default
---
```{r setup, include=FALSE}
library(knitr)
knitr::opts_chunk$set(tidy.opts=list(width.cutoff=120),tidy=TRUE,echo = TRUE)
```
```{r, include=TRUE,results='hide', message=FALSE, warning=FALSE, echo=TRUE}
library(plyr)
library(dplyr)
library(ggplot2)
library(readr)
require(knitr)
require(plotly)
```
```{r, echo= TRUE)
df<- read.csv("my_csv.csv")
abcd<-c('AA','BB','CC', 'DD')
## when using all of the data frame I plan to do : abcd<-df$C1
myfun<- function(j)
{
main<-paste("Printing ", abcd[j]," <br> (Hover for values) " )
df %>%
filter(C1==abcd[j])%>%
select(C1,C2,C3,C4) %>%
group_by(C1,C2,C3) %>%
summarise(value=sum(C4))-> new_df
p<-(plot_ly(new_df, x= ~C2, y = ~value, color = ~C3, type = "bar", alpha = 0.9) %>%
layout(title = main, xaxis = list(title ="", yaxis = list(title = "Test Title")))%>% layout(barmode = "stack"))
p
}
```
```{r, echo=TRUE}
myfun(1)
myfun(2)
myfun(3)
```
当我明确地打电话给
myfun(1)
myfun(2)等
这些图显示在编织的html中
但是我在 C1 中有200个唯一值,我想迭代地显示所有这些值。
所以我试过
1
```{r, echo=TRUE}
lapply(1:4,myfun)
```
但这并没有显示任何情节。
然后我尝试了:
2。
```{r, echo =TRUE}
print(lapply(1:4, myfun))
```
仍然没有输出
因此
3.
```{r, echo =TRUE}
for(i in 1:4){
(myfun(i))
}
```
再次没有情节 4。 所以使用for循环
```{r, echo= TRUE}
abcd<-c('AA','BB','CC', 'DD')
## when using all of the data frame I plan to do : abcd<-df$C1
for(j in 1:4){
main<-paste("Printing ", abcd[j]," <br> (Hover for values) " )
df %>%
filter(C1==abcd[j])%>%
select(C1,C2,C3,C4) %>%
group_by(C1,C2,C3) %>%
summarise(value=sum(C4))-> new_df
p<-(plot_ly(new_df, x= ~C2, y = ~value, color = ~C3, type = "bar", alpha = 0.9) %>%
layout(title = main, xaxis = list(title ="", yaxis = list(title = "Test Title")))%>% layout(barmode = "stack"))
p
# no change when using print(p)
}
```
没有情节 但是,如果我将p移动到for循环外部,它只打印一个与循环的最后一个值对应的绘图。 我错过了什么?我该如何解决? 提前谢谢。
答案 0 :(得分:1)
Combiner
返回一个列表,在编写文档时必须将其呈现为HTML
为此,您应该使用lapply()
htmltools::tagList()
请注意,如果呈现&#39;内联&#39;
,则返回空格