R标记,在循环中输出测试结果
我正在寻找一个格式良好的测试结果降价输出,它是在for循环中生成的,并带有标题。比如说R标记,在循环中输出测试结果,r,r-markdown,R,R Markdown,我正在寻找一个格式良好的测试结果降价输出,它是在for循环中生成的,并带有标题。比如说 df <- data.frame(x = rnorm(1000), y = rnorm(1000), z = rnorm(1000)) for (v in c("y","z")) { cat("##", v, " (model 0)\n") summary(lm(x~1, df)) cat("##", v, " (model 1)\n")
df <- data.frame(x = rnorm(1000),
y = rnorm(1000),
z = rnorm(1000))
for (v in c("y","z")) {
cat("##", v, " (model 0)\n")
summary(lm(x~1, df))
cat("##", v, " (model 1)\n")
summary(lm(as.formula(paste0("x~1+",v)), df))
}
y(型号1)
z(型号0)
等等
有几个结果讨论了问题的某些部分,例如或建议将asis
-标记与cat
-语句结合使用。包括标题
最接近我的请求似乎是两年前的。然而,尽管受到高度赞赏,一些建议还是被弃用,比如asis_输出
,或者我无法让它们在formattable
建议(例如使用lm
-output)等一般条件下工作。我只是想知道——从那时起两年过去了——是否有一种现代的方法可以促进我所寻找的东西。解决方案类型1
您可以使用一些lappy
循环来执行capture.output(cat(.))
方法。将输出发送到文件并使用rmarkdown::render(.)
这是生成*.pdf
的R代码
capture.output(cat("---
title: 'Test Results'
author: 'Tom & co.'
date: '11 10 2019'
output: pdf_document
---\n\n```{r setup, include=FALSE}\n
knitr::opts_chunk$set(echo = TRUE)\n
mtcars <- data.frame(mtcars)\n```\n"), file="_RMD/Tom.Rmd") # here of course your own data
lapply(seq(mtcars), function(i)
capture.output(cat("# Model", i, "\n\n```{r chunk", i, ", comment='', echo=FALSE}\n\
print(summary(lm(mpg ~ ", names(mtcars)[i] ,", mtcars)))\n```\n"),
file="_RMD/Tom.Rmd", append=TRUE))
rmarkdown::render("_RMD/Tom.Rmd")
生产:
(注:省略站点3)
此处显示的输出是否为您希望每个模型输出的格式?或者对于每个模型,您还想打印其他内容吗?我希望得到一个简单的print或print.summary语句的格式良好的输出。我不需要在输出的同时打印其他信息。但我确实在循环前后都有R代码,我也希望将其包含在呈现文档中。我找到了另一个解决方案@Tom,我认为这是您真正想要的。谢谢您的回答。是否可以将此解决方案嵌入较长的R脚本中,一方面可以通过rmarkdown渲染,另一方面可以在控制台中逐步运行?@Tom是的,当然,唯一的效果是它生成两个文件(
*.Rmd
和*.pdf
),不过,您可以注释掉这些行,以暂时防止它。非常感谢您提供的第二个扩展解决方案,它将很容易融入生产。由于没有人能想出一种更直接的方法来完成我所寻找的任务,这个精心设计的解决方案似乎反映了rmarkdown当前的可能性状态。你赢得了赏金。
Call:
lm(formula = as.formula(paste0("x~1+", v)), data = df)
Residuals:
Min 1Q Median 3Q Max
-3.8686 -0.6915 -0.0447 0.6921 3.1504
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.05374 0.03297 -1.630 0.103
y -0.02399 0.03189 -0.752 0.452
Residual standard error: 1.042 on 998 degrees of freedom
Multiple R-squared: 0.0005668, Adjusted R-squared: -0.0004346
F-statistic: 0.566 on 1 and 998 DF, p-value: 0.452
capture.output(cat("---
title: 'Test Results'
author: 'Tom & co.'
date: '11 10 2019'
output: pdf_document
---\n\n```{r setup, include=FALSE}\n
knitr::opts_chunk$set(echo = TRUE)\n
mtcars <- data.frame(mtcars)\n```\n"), file="_RMD/Tom.Rmd") # here of course your own data
lapply(seq(mtcars), function(i)
capture.output(cat("# Model", i, "\n\n```{r chunk", i, ", comment='', echo=FALSE}\n\
print(summary(lm(mpg ~ ", names(mtcars)[i] ,", mtcars)))\n```\n"),
file="_RMD/Tom.Rmd", append=TRUE))
rmarkdown::render("_RMD/Tom.Rmd")
---
title: "Test results"
author: "Tom & co."
date: "15 10 2019"
output: pdf_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
# Overview
This is an example of an ordinary code block with output that had to be included.
```{r mtcars, fig.width=3, fig.height=3}
head(mtcars)
```
# Test results in detail
The test results follow fully automated in detail.
```{r mtcars2, echo=FALSE, message=FALSE, results="asis"}
invisible(sapply(tail(seq(mtcars), -2), function(i) {
fo <- reformulate(names(mtcars)[i], response="mpg")
s <- summary(do.call("lm", list(fo, quote(mtcars))))
cat("\n## Model", i - 2, "\n")
sapply(1:19, function(j)
cat(paste0("`", ". ", capture.output(s)[j]), "` \n"))
cat(" \n")
}))
```
***Note:*** This is a concluding remark to show that we still can do other stuff afterwards.