Создание knitr запускает r script: я использую read_chunk или источник? - программирование
Подтвердить что ты не робот

Создание knitr запускает r script: я использую read_chunk или источник?

Я запускаю R версии 2.15.3 с RStudio версии 0.97.312. У меня есть один script, который считывает мои данные из разных источников и создает несколько data.tables. Тогда у меня есть еще один r script, который использует data.tables, созданные в первом script. Я хотел превратить второй script в метку R script, чтобы результаты анализа могли выводиться в виде отчета.

Я не знаю цели read_chunk, а не source. Мой read_chunk не работает, но source работает. В любом экземпляре я не вижу объекты на панели рабочего стола RStudio.

Пожалуйста, объясните разницу между read_chunk и source? Почему я должен использовать один или другой? Почему мой .Rmd script не работает

Вот смехотворно упрощенный образец

Это не работает. Я получаю следующее сообщение

Ошибка: объект 'z' не найден

Два простых файла...

проверка источника на rmd.R

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

test.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.
4b9b3361

Ответ 1

read_chunk() только считывает исходный код (для будущих ссылок); он не оценивает код типа source(). Цель read_chunk() была описана в этой странице, а также руководство.

Ответ 2

Нет возможности запускать кусок в интерактивном режиме из knitr AFAIK. Однако это можно сделать достаточно легко, например:

#' 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