我想创建一个自动编织器报告,它将为我的数据框中的每个数字字段生成直方图。我的目标是在不必指定实际字段的情况下执行此操作(此数据集包含超过70个,我还想重用该脚本)。
我尝试过几种不同的方法:
p
,然后在循环后调用p
PLOTS <- NULL
,并在循环中附加图PLOTS <- append(PLOTS, p)
.png
文件,但不必处理保存然后重新访问每个文件的开销我担心情节设备的复杂性正在逃避我。
如何将循环中的每个绘图输出到报告中?目前,我能做到的最好的是输出通过将其保存到对象并在循环外调用该对象而产生的最终绘图。
在RStudio中使用knitr
的R降价块:
```{r plotNumeric, echo=TRUE, fig.height=3}
suppressPackageStartupMessages(library(ggplot2))
FIELDS <- names(df)[sapply(df, class)=="numeric"]
for (field in FIELDS){
qplot(df[,field], main=field)
}
```
从这一点来说,我希望进一步定制这些图。
答案 0 :(得分:41)
将qplot
换入print
。
knitr
在循环之外, qplot
将为您执行此操作,但(至少我已安装的版本)未在循环内检测到此内容(这与行为一致) R命令行)。
答案 1 :(得分:9)
我在markdown中使用子Rmd文件,也可以在sweave中使用。
在Rmd中使用以下代码段:
```{r run-numeric-md, include=FALSE}
out = NULL
for (i in c(1:num_vars)) {
out = c(out, knit_child('da-numeric.Rmd'))
}
```
da-numeric.Rmd看起来像:
Variabele `r num_var_names[i]`
------------------------------------
Missing : `r sum(is.na(data[[num_var_names[i]]]))`
Minimum value : `r min(na.omit(data[[num_var_names[i]]]))`
Percentile 1 : `r quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[2]`
Percentile 99 : `r quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[100]`
Maximum value : `r max(na.omit(data[[num_var_names[i]]]))`
```{r results='asis', comment="" }
warn_extreme_values=3
d1 = quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[2] > warn_extreme_values*quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[1]
d99 = quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[101] > warn_extreme_values*quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[100]
if(d1){cat('Warning : Suspect extreme values in left tail')}
if(d99){cat('Warning : Suspect extreme values in right tail')}
```
``` {r eval=TRUE, fig.width=6, fig.height=2}
library(ggplot2)
v <- num_var_names[i]
hp <- ggplot(na.omit(data), aes_string(x=v)) + geom_histogram( colour="grey", fill="grey", binwidth=diff(range(na.omit(data[[v]]))/100))
hp + theme(axis.title.x = element_blank(),axis.text.x = element_text(size=10)) + theme(axis.title.y = element_blank(),axis.text.y = element_text(size=10))
```
在github上查看我的datamineR包 https://github.com/hugokoopmans/dataMineR
答案 2 :(得分:4)
希望添加一个快速注释:
我莫名其妙地用谷歌搜索了同样的问题并进入该页面。
现在到了2018年,只需在循环中使用987ABC11-15; 77; 877; 987ABC66-68
987ABC11-15; 77; 987ABC877; 987ABC66-68
987ABC11-15; 987ABC77; 987ABC877; 987ABC66-68
987ABC11-987ABC15; 987ABC77; 987ABC877; 987ABC66-68
。
print()
答案 3 :(得分:3)
作为雨果优秀答案的补充,我相信在2016年你需要加入print
command as well:
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter .ViewHolder>{
.....
public void addNewDataset(ArrayList<Integer> data) {
......
notifyDataSetChanged();
}
}
答案 4 :(得分:0)
为了将 Rmd 编织到 HTML,我发现有一个数字列表更方便。在这种情况下,我使用 results='hide'
获得了理想的输出,如下所示:
---
title: "Make a list of figures and show it"
output:
html_document
---
```{r}
suppressPackageStartupMessages({
library(ggplot2)
library(dplyr)
requireNamespace("scater")
requireNamespace("SingleCellExperiment")
})
```
```{r}
plots <- function() {
print("print")
cat("cat")
message("message")
warning("warning")
# These calls generate unwanted text
scater::mockSCE(ngene = 77, ncells = 33) %>%
scater::logNormCounts() %>%
scater::runPCA() %>%
SingleCellExperiment::reducedDim("PCA") %>%
as.data.frame() %>%
{
list(
f12 = ggplot(., aes(x = PC1, y = PC2)) + geom_point(),
f22 = ggplot(., aes(x = PC2, y = PC3)) + geom_point()
)
}
}
```
```{r, message=FALSE, warning=TRUE, results='hide'}
plots()
```
仅显示绘图和警告(您也可以关闭)。