23

我正在运行 R 版本 2.15.3 和 RStudio 版本 0.97.312。我有一个脚本可以从各种来源读取我的数据并创建多个 data.tables。然后我有另一个 r 脚本,它使用在第一个脚本中创建的 data.tables。我想把第二个脚本变成一个 R markdown 脚本,这样分析的结果就可以作为报告输出。

不知道目的read_chunk,反对source。我read_chunk的不工作,但source正在工作。无论哪种情况,我都看不到 RStudio 工作区面板中的对象。

read_chunk请解释和之间的区别source?我为什么要使用其中一个?为什么我的 .Rmd 脚本不起作用

这是可笑的简化示例

这没用。我收到以下消息

错误:找不到对象“z”

两个简单的文件...

rmd.R 的源测试

x <- 1:10
y <- 3:4
z <- x*y  

测试源码.Rmd

Can I run another script from Rmd
========================================================

Testing if I can run "test of source to rmd.R"

```{r first part}
require(knitr)
read_chunk("test of source to rmd.R")
a <- z-1000
a
```

The above worked only if I replaced "read_chunk" with "source". I 
can use the vectors outside of the code chunk as in inline usage. 
So here I will tell you that the first number is `r a[1]`. The most 
interesting thing is that I cannot see the variables in RStudio 
workspace but it must be there somewhere.
4

3 回答 3

14

read_chunk()只读取源代码(供以后参考);它不会source(). 本页手册read_chunk()中解释了的目的。

于 2013-03-19T17:50:03.510 回答
1

没有选项可以从knitrAFAIK 中以交互方式运行块。但是,这可以通过以下方式轻松完成:

#' Run a previously loaded chunk interactively
#'
#' Takes labeled code loaded with load_chunk and runs it in the /global/ envir (unless otherwise specified)
#'
#' @param chunkName The name of the chunk as a character string
#' @param envir The environment in which the chunk is to be evaluated 
run_chunk <- function(chunkName,envir=.GlobalEnv) {
    chunkName <- unlist(lapply(as.list(substitute(.(chunkName)))[-1], as.character))    
    eval(parse(text=knitr:::knit_code$get(chunkName)),envir=envir) 
} 
NULL
于 2015-01-26T14:03:16.373 回答
1

万一它对其他人有帮助,我发现使用read_chunk()在不评估的情况下阅读脚本可以在两个方面有用。首先,您可能有一个包含许多块的脚本,并希望控制哪些块在何处运行(例如,特定位置的绘图或表格)。我source想在脚本中运行所有内容时使用(例如,在文档开头加载一组标准包或自定义函数)。我已经开始read_chunk在文档的早期使用来加载脚本,然后在需要它们的地方有选择地运行我想要的块。

其次,如果您直接或交互地使用 R 脚本,您可能需要很长的代码前导码来加载包、数据等。但是,如果之前的代码块在主文档已加载数据。

于 2019-08-05T06:42:45.823 回答