如何直接编织R对象?

时间:2017-07-26 08:10:23

标签: r pipe latex knitr

我希望将knit()文档直接存储在R中作为R对象,作为字符向量

我知道我可以通过knit() tempfile()执行此操作然后导入结果,如下所示:

library(knitr)
library(readr)
ex_file <- tempfile(fileext = ".tex")
knitr::knit(text = "foo", output = ex_file)
knitted_obj <- readr::read_file(ex_file)
knitted_obj

返回

# [1] "foo\n"

按预期。

有没有办法在没有的情况下使用tempfile()和直接&#34;管道&#34;向量的结果?

为什么我想要这个,你问?

  • *.tex字符串将以编程方式保存到光盘,稍后再渲染为PDF。在下游函数中从光盘读取呈现*.tex将使代码更复杂。
  • 缓存更容易,将此缓存移动到另一台机器。
  • 我真的很害怕一般的副作用,特别是跨机器/操作系统的文件系统恶作剧。我希望将这些功能尽可能地隔离(print()save()plot())。

这会让我成为一个坏人(或只是OCD)R开发人员吗?

2 个答案:

答案 0 :(得分:1)

您可以使用if cart_item.menuitem.id == i.id: 创建将其输出写入变量con <- textConnection("varname", "w")的连接,并在varname的调用中使用output=con。例如:

knit()

返回与tempfile方法相同的内容,换行符除外。多行将显示为library(knitr) con <- textConnection("knitted_obj", "w") knit(text="foo", output = con) close(con) knitted_obj 的不同元素。我没有定时,但文本连接因速度慢而闻名,所以这不一定和写入文件系统一样快。

答案 1 :(得分:1)

它应该像这样的单行一样简单:

knitted_obj = knitr::knit(text = "foo")

您可能需要再次阅读帮助页?knitr::knit以了解它返回的内容。