我一直在使用 knitr、R markdown 和 pandoc 为我将在秋季教授的课程创建投影仪演示文稿/讲座。我编写了一个简短的 R 脚本来自动化该过程(类似于“make”文件),其中涉及:
- 编织
.Rmd
文件; - 调用 pandoc 创建
.tex
文件; - 编译
.tex
文件; - 清理东西(删除不必要的文件)等。
一切似乎都很好,除了一个例外(迄今为止)。我有一节课似乎只有当我直接调用 knit 函数时才能很好地“编织”。当我尝试使用我的make
函数来编织.Rmd
文件时,某些 R 对象无法识别。我在下面提供了一个简短的示例来说明问题:
我用一个代码块创建了一个名为“test.Rmd”的文件(如下):
## Simulation
```{r test, comment=NA, message=FALSE, warning=FALSE}
library(mosaic)
obs<-c(25, 22, 30, 40) # Number of observations in each category
Ais<-c(0.34, 0.101, 0.104, 0.455) # Total Accreage (NUll proportions)
e.count<-Ais*117 # Expected Counts
test.stat<-sum((obs-e.count)^2/(e.count)) #Test statistic = 43.6
rand.dist<-do(1000)*{
# Randomization Distribution
new.dat<-sample(1:4, replace=TRUE, size=117, prob=Ais) # Sample with Prob = Null pi's
new.obs<-tally(~new.dat) # Simulated counts
chi.sq<-sum((new.obs-e.count)^2/e.count) # Simulated test statistic
}
```
如果我键入 knit("test.Rmd"),则此文件“编织”很好。但是,如果我创建一个名为 my.knit<-fucntion(){knit("test.Rmd")} 的函数,并通过键入 my.knit() 使用此函数进行编织,我会在输出说明:
Error: object 'Ais' not found
知道为什么从另一个函数调用“knit”会改变代码的行为吗?
----------------- 2014 年 5 月 1 日更新 ----------------------
我再次测试了代码,这次将“(”和“)”放在 Ais 周围。同样,如果我键入 knit("test.Rmd"),一切正常,但在使用 my.knit() 时则不行。这是我键入 my.knit() 时 .md 文件中的输出:
## Simulation
```r
library(mosaic)
obs <- c(25, 22, 30, 40) # Number of observations in each category
(Ais <- c(0.34, 0.101, 0.104, 0.455)) # Total Acreage (NUll proportions)
```
```
[1] 0.340 0.101 0.104 0.455
```
```r
e.count <- Ais * 117 # Expected Counts
test.stat <- sum((obs - e.count)^2/(e.count)) #Test statistic = 43.6
rand.dist <- do(1000) * {
# Randomization Distribution
new.dat <- sample(1:4, replace = TRUE, size = 117, prob = Ais) # Sample with Prob = Null pi's
new.obs <- tally(~new.dat) # Simulated counts
chi.sq <- sum((new.obs - e.count)^2/e.count) # Simulated test statistic
}
```
```
Error: object 'Ais' not found
```
这很奇怪,因为我已经使用这种方法创建了 10 个左右的其他演示文稿而没有问题。Hadley,感谢您建议查看 rmarkdown 包。我正在使用 RStudio,并认识到内置功能可以实现我的许多目标。我目前如何设置的一个优点是我可以使用所有演示文稿通用的头文件(在乳胶中),然后只需使用 \includeonly 来保留我想要在任何一天的讲座中使用的部分。