我分析来自许多城市的测量数据(数百个),并且需要为每个城市创建单独的报告(采用Adobe pdf格式).
我的过程是这样的:
这非常繁琐,看起来非常适合每个城市的循环,但它怎么能完成呢?
谢谢r-contributors!
/克里斯
我非常喜欢knitr在Rstudio中使用它并一直用它来编写降价演示和数据分析.我想在纸上使用相同的代码和结果,并希望将Rmd文件中的代码块转换为Rnw文件```{r}的块<< >>= @.
这允许使用为主文件编写的相同文档和代码.
有没有一种方法可以在markdown和Rnw文件的代码块之间进行转换?
或者整个文件本身除了代码块的语法差异外,它们在标记中非常相似(用pandoc将文本转换为latex很容易)
更新:我问保罗马雷尔(以下简称"最终boss"),他告诉我打开一个新页面在做决定src/library/graphics/src/graphics.c的GNewPlot:
pGEDevDesc GNewPlot(Rboolean recording)
Run Code Online (Sandbox Code Playgroud)
它有效地查看par(mfg)并par(new)决定是否打开新页面.我如何在附加软件包中进行测试?
使用纯R代码或某些C代码的解决方案是可以接受的.
knitr使用evaluate包来评估R代码块,并捕获结果,包括绘图.简单地说,evaluate调用recordPlot()记录当前情节的快照,每个代码的表达进行了评估之后,也像绘制挂钩时,before.plot.new与before.grid.newpage被称为(通常这种情况发生了新的情节绘制之前).对于那些"Luke's",如果不够清楚,请使用来源.
在我们制作快照之后,我们需要决定是否保留它,因为在我们评估一个新的表达式后,快照可能不会被更改,这与绘图无关.现在,这里是我的问题:当一个情节中包含的子图(例如pairs(),coplot()或par(mfrow = c(2, 3))在基础R图形),我们不应该保持不完整的快照.在下面的示例中,应丢弃前三个图:
par(mfrow = c(2, 2))
plot(rnorm(10))
plot(rnorm(10))
plot(rnorm(10))
plot(rnorm(10))
Run Code Online (Sandbox Code Playgroud)
为了实现这一目标,我们比较par("mfg")[1:2]给par("mfg")[3:4](你可以在源代码中看到的),而这个效果很好在某些情况下,但不是全部,例如,问题#25:
layout(matrix(c(1,3,2,3), 2))
plot(rnorm(10))
plot(rnorm(10))
plot(rnorm(10))
Run Code Online (Sandbox Code Playgroud)
现在我怎么知道第4行之前情节没有完成?这个mfg伎俩不再适用.
我一直在寻找这个问题的答案很长一段时间,如果有人能给我一个暗示,我会真的很感激; 进一步的细节在上面的两个链接,我可以澄清是否有任何不清楚.我相信必须存在一个解决方案,因为所有R设备都知道何时开始新的绘图屏幕或文件,而不完整的绘图不会触发新的绘图屏幕或文件.
我知道这可以用php和其他语言来完成,但是想知道是否可以使用knitr完成以下操作:
假设我有一个带有两个标题1部分的Rmarkdown(.rmd)文档:
# This is the first heading for the first document
Lorem ipsum dolor sit amet
# This is the second heading for the first document
plot(object)
Run Code Online (Sandbox Code Playgroud)
问题1:如果打开另一个.rmd文档,我该如何创建一个链接,以便在解析时,该文档将显示其内容以及第一个文档中的整个内容.例如:
# This is the first heading for the second document
Lorem ipsum dolor sit amet
[command goes here to insert the first document]
Run Code Online (Sandbox Code Playgroud)
结果将是:
# This is the first heading for the second document
Lorem ipsum dolor sit amet
# This is the first heading for the first document
Lorem ipsum …Run Code Online (Sandbox Code Playgroud)当我创建R Markdown文件并编织HTML时,会出现以下情况:
<style type="text/css">
.main-container {
max-width: 940px;
margin-left: auto;
margin-right: auto;
}
Run Code Online (Sandbox Code Playgroud)
我想更改max-width属性.我该怎么办?
谢谢.
我想使用代码块在文本的开头插入图片,而不是降价.我正在使用Tufte讲义模板output: rmarkdown::tufte_handout,当我在YAML标题后直接插入它但在TOC之前插入如下:
\centering

\raggedright
\tableofcontents
\clearpage
Run Code Online (Sandbox Code Playgroud)
然后图像跨越主体.我知道有块可以选择让块跨越整个页面放置fig.fullwidth = TRUE在块头中,但我有点困惑,因为我没有从数据生成任何图形,我不知道如何简单的地方来自块内的图像.
另一个问题是,当我在YAML头中设置toc:true时,图像只会在插入的toc 之后出现 - 这就是我使用latex命令插入toc的原因.
谢谢你的建议.
这个问题的动机是Rmarkdown没有将系统命令的结果输出到html文件.由于某种原因,system()R(或system2())中的输出无法被sink()或捕获capture.output(),因此目前knitr无法记录输出.例如,在R控制台中:
> system('ls')
DESCRIPTION
NAMESPACE
R
README.md
inst
man
Run Code Online (Sandbox Code Playgroud)
但在knitr文档中,您将看不到输出,因为capture.output(system('ls'))是character(0),即输出无法捕获.当然,我可以cat(system('ls', intern = TRUE), sep = '\n')按照我在答案中提到的那样做,但这有点尴尬.我想知道它是否是一种system()不使用intern = TRUE和捕获输出的方法cat().
更新:请参阅https://github.com/yihui/knitr/issues/1203,了解我为解决问题而提供的黑客攻击.
我想主要将.Rmd文件导出为latex pdf.
这是我目前正在使用的代码
```{r ,fig.cap="caption",fig.env='figure', fig.width=10, fig.height=10,echo=FALSE, results='asis', warning=FALSE, strip.white=TRUE}
library(png)
library(grid)
img <- readPNG("filepath/overview.png")
grid.raster(img)
```
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我已经在使用strip.white=TRUE&fig.env='figure'但它们似乎不起作用..PNG文件在图像上方或下方没有任何(白色)间距.
我知道我可以直接使用乳胶并实现我想要的,但我希望能够在Word中重现这一点,如果需要的话.同样在Word中,图像上方和下方有半页空白空间.
任何帮助将不胜感激.谢谢
是否可以将CSS类添加到某个代码块?
假设以下文件:
---
title: "Untitled"
output: html_document
---
```{r cars}
summary(cars)
```
Run Code Online (Sandbox Code Playgroud)
我想给那些标记为'cars'的块一个CSS类,例如.myClass.有没有可能像
```{r cars} {.myClass}
summary(cars)
```
Run Code Online (Sandbox Code Playgroud)
或者?我知道黑客喜欢将整个块包裹在另一个块中<div>.我对一个直接的解决方案感兴趣.
我是一个顽固的使用者而=不是一直使用<-,显然很多R程序员都会对此不以为然.我写的formatR包可以替换=为<-基于parser包.正如你们中的一些人可能知道的那样,parser几天前在CRAN上成了孤儿.虽然现在又回来了,但这让我对依赖它犹豫不决.我不知道是否有另一种方式来安全地更换=有<-,因为不是所有=的意思分配,例如fun(a = 1).正则表达式是不太可靠(见第18行中的mask.inline()函数formatR),但我肯定会欣赏它,如果你能提高矿井.也许这个codetools包可以帮忙吗?
一些测试用例:
# should replace
a = matrix(1, 1)
a = matrix(
1, 1)
(a = 1)
a =
1
function() {
a = 1
}
# should not replace
c(
a = 1
)
c(
a = c(
1, 2))
Run Code Online (Sandbox Code Playgroud)