2017-01-08 13 views
3

Мое понимание заключается в том, что knitr:spin позволяет мне работать с моим простым, ванильным, обычным «хорошим сценарием R», сохраняя при этом возможность генерировать полный документ, который понимает синтаксис разметки. (См https://yihui.name/knitr/demo/stitch/)Knitr: spin - как добавить текст без добавления вручную # 'каждой строки?

Действительно, функция в Rstudio, в то время как супер аккуратный, на самом деле действительно хлопот, потому что

  • Мне нужно дублировать свой код и разорвать его на куски, которые супер скучный + неэффективна, как сложно отслеживать изменения кода.
  • Кроме того, не может прочитать мое текущее рабочее пространство. Это как-то удивительно, но это то, что есть.

В целом это очень сдерживая ... Смотрите здесь для родственного обсуждения Is there a way to knitr markdown straight out of your workspace using RStudio?.

Как обсуждалось здесь (http://deanattali.com/2015/03/24/knitrs-best-hidden-gem-spin/), spin представляется решением.

Действительно, knitr:spin синтаксис выглядит следующим образом:

#' This is a special R script which can be used to generate a report. You can 
#' write normal text in roxygen comments. 
#' 
#' First we set up some options (you do not have to do this): 

#+ setup, include=FALSE 
library(knitr) 

в обычном рабочем пространстве!

BUT Обратите внимание, что каждой строке текста предшествует #'.

Моя проблема заключается в том, что также очень неэффективно добавлять #' после каждой отдельной строки текста. Есть ли способ сделать это автоматически?

Скажите, что я выбираю целый фрагмент текста, и rstudio добавляет это #' в каждую строку? Может быть, в том же духе, что и комментировать весь фрагмент кода?

Я что-то упустил?

Спасибо!

+1

Как насчет замены каждого хеша хешем и апострофом в выбранном фрагменте кода? – kaksat

+0

спасибо, чувак, но я просто хочу написать свой текст, не добавляя ничего вручную. что полностью поражает цель помочь написать научный документ ... –

+1

Вы говорите о тексте комментария внутри куска кода или обычного текста вне куска кода? Можете ли вы опубликовать образец вашего полного документа rmarkdown? – eipi10

ответ

3

В RStudio против 1.1.28, начиная строку с #' вызывает следующую строку, чтобы начать с #', когда я нажимаю войти в *.R файл на моей машине (Ubuntu Linux 16.04LTS).

До тех пор, пока вы начинаете с ним кусок текста, он будет продолжен.Но для ранее существующих R-скриптов, похоже, вам придется использовать find -> replace или написать функцию для изменения требуемого файла, это сработало для меня в очень простом тесте.

comment_replace <- function(in_file, out_file = in_file){ 
    in_text <- scan(file = in_file, what = character(), sep = "\n") 
    out_text <- gsub("^# ", "#' ", in_text) 
    cat(out_text, sep = "\n", file = out_file) 
} 

Я хотел бы отметить, что эта функция делает не проверку на существовавшие ранее #', вы хотели бы построить что. Я изменил его так, чтобы он не должен заменить их слишком много, добавив пробел в регулярное выражение.

+1

Я также хотел бы отметить, что если вы ** начинаете ** с используя Rmd, все это намного проще, и вы можете использовать 'Ctrl + alt + p' для запуска всех предыдущих кусков, запускать все куски, чтобы получить подобное поведение, как' rmarkdown :: render'. – rmflight

+0

спасибо! что мой первый кусок кода загружает все нужные мне данные. Могу ли я потом прокомментировать этот код, чтобы, когда я 'render' мой документ Rstudio использует только объекты в памяти? –

+1

вы можете comme nt, или используйте 'eval = FALSE', поэтому он не будет повторно запускаться при следующем рендеринге. – rmflight

0

С документом RMarkdown, можно было бы написать что-то вроде этого:

As you can see I have some fancy code below, and text right here. 

```{r setup} 
# R code here 
library(ggplot2) 
``` 

And I have more text here... 

This gist предлагает быстрое введение в особенности RMarkdown и knitr «с. Я думаю, вы не совсем понимаете, что такое RMarkdown, это документ с уценкой, в котором R разбрызгивается между собой, а не (как вы сказали) R-скриптом с разбросанной пометкой.


Edit: Для тех, кто downvoting, пожалуйста, прочитайте комментарии ниже этого ... OP не уточнил, что он использовал spin ранее.

+1

Да, спасибо, но это проблема. Rmarkdown не позволяет использовать объекты в памяти, поэтому я должен запускать все это сразу. Я не хочу Rmarkdown, я хочу использовать knitr. –

+1

@Noobie О, это имеет смысл. Попробуйте https://yihui.name/knitr/demo/stitch/ –

+1

да, спасибо, я говорю о 'spin' здесь. вы правы https://yihui.name/knitr/demo/stitch/ –