【问题标题】:Knitr:spin - how to add text without manually adding #' every line?Knitr:spin - 如何在不手动添加 #' 每行的情况下添加文本?
【发布时间】:2017-01-08 21:21:21
【问题描述】:

我的理解是,knitr:spin 允许我处理我的普通、普通、常规的良好 R 脚本,同时保持生成理解 Markdown 语法的完整文档的能力。 (见https://yihui.name/knitr/demo/stitch/

确实,Rstudio 中的 rmarkdown 功能虽然超级简洁,但实际上确实很麻烦,因为

  • 我需要复制我的代码并将其分成几块,这非常无聊 + 效率低下,因为很难跟踪代码更改。
  • 除此之外,rmarkdown 无法读取我当前的工作空间。这有点令人惊讶,但事实就是如此。

总而言之,这非常限制...有关相关讨论,请参见此处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)

在常规工作区中!

但是注意每一行文本前面是如何以#' 开头的。

我的问题是,在每行文本之后添加#' 也是非常低效的。有没有办法自动做到这一点?

假设我选择了一整段文本,而 rstudio 将 #' 每行添加?也许本着与注释一大段代码行相同的精神?

我错过了什么吗?

谢谢!

【问题讨论】:

  • 在选定的代码块中用散列和撇号替换每个散列怎么样?
  • 您说的是代码块内的注释文本还是代码块外的常规文本?您可以发布完整 rmarkdown 文档的示例吗?
  • 对于块外的常规文本,只需键入常规文本。不需要哈希标记。
  • 在 RStudio 中打开一个新的rmarkdown 文档,其中包括一个示例文档。请注意 R 代码是如何在单独的块中设置的。对于内联 R 代码,即句子中的 R 代码,假设您之前在代码块中创建了一个值 x,并且您想在句子中使用它。然后你可以输入这个(不带双引号):“现在我们可以看到`x`等于`r x`”。使用 R markdown 的所有基本信息都可以在here找到。
  • 听起来他想用knitr::spin而不是写rmd。

标签: r rstudio knitr r-markdown


【解决方案1】:

在 RStudio v 1.1.28 中,当我在我的机器(Ubuntu Linux 16.04LTS)上输入 *.R 文件时,以 #' 开头的一行会导致下一行以 #' 开头。

所以只要你用它开始一个文本块,它就会继续。但是对于以前存在的 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)
}

我要注意,这个函数检查预先存在的#',你会想把它内置进去。我修改了它,使它不应该通过添加一个太多来替换它们正则表达式中的空格。

【讨论】:

  • 我还要注意,如果你开始使用 Rmd,整个事情会容易得多,你可以使用 Ctrl+alt+p 运行所有以前的块,运行所有块获得与rmarkdown::render 类似的行为。
  • 谢谢!我仍然有一个问题如下。假设我的第一段代码加载了我需要的所有数据。我可以在之后评论该代码,以便当我 render 我的文档 Rstudio 只使用内存中的对象吗?
  • 您可以注释该代码,或使用eval=FALSE,这样它就不会在下一次渲染时重新运行。
【解决方案2】:

使用 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 的 markdown 文档,而不是(如你所说的)中间夹着 markdown 的 R 脚本。


编辑:对于那些不赞成投票的人,请阅读下面的 cmets... OP 没有指定他之前使用的是 spin

【讨论】:

  • 是的,谢谢,但这就是问题所在。 Rmarkdown 不允许在内存中使用对象,所以我必须一次运行整个事情。我不要 Rmarkdown,我要使用 knitr。
  • @Noobie 哦,这更有意义。试试yihui.name/knitr/demo/stitch
  • 是的,谢谢,我在这里谈论的是spin。你是对的yihui.name/knitr/demo/stitch
  • @Noobie 嗯,除了查找和替换之外,我认为没有办法自动化#'。您使用的是哪个文本编辑器?可能有某种方法可以为其编写扩展。
  • 我只是在使用我的朋友 Rstudio
猜你喜欢
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 1970-01-01
相关资源
最近更新 更多