Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:如何将重复输出编码到Rmarkdown文件中?_R_R Markdown - Fatal编程技术网

R:如何将重复输出编码到Rmarkdown文件中?

R:如何将重复输出编码到Rmarkdown文件中?,r,r-markdown,R,R Markdown,我正在对数据集进行复杂的探索性分析。我创建了一个函数,它将获取所需的变量,运行并评估几个模型,然后返回一个包含各种结果和绘图的列表。我可以很容易地在预测变量和结果变量的不同组合上运行它。我还想创建一个“函数”或可重复的脚本,它将在rmarkdown输出中显示结果,这样当我想要对输出进行更改时,就不必编辑每个块。(例如,我刚刚在函数中添加了敏感性分析,但现在我必须编辑大约45个块才能显示结果。) 简化示例: #Packages used: dplyr, knitr, kableExtra, pan

我正在对数据集进行复杂的探索性分析。我创建了一个函数,它将获取所需的变量,运行并评估几个模型,然后返回一个包含各种结果和绘图的列表。我可以很容易地在预测变量和结果变量的不同组合上运行它。我还想创建一个“函数”或可重复的脚本,它将在rmarkdown输出中显示结果,这样当我想要对输出进行更改时,就不必编辑每个块。(例如,我刚刚在函数中添加了敏感性分析,但现在我必须编辑大约45个块才能显示结果。)

简化示例:

#Packages used: dplyr, knitr, kableExtra, pander

data("airquality")
lm.1 <- lm(Solar.R ~ Wind, data = airquality, na.action = na.omit)
lm.2 <- lm(Solar.R ~ Wind + Temp, data = airquality, na.action = na.omit)

#The real output list is bigger/more complex:
myList <- list(model.1 = lm.1,  model.2 = lm.2, bic = BIC(lm.1,lm.2))


#Create a character vector containing each line of display code I wish to run:  

myDisplay <- c("kable('Model Comparisons', col.names = NULL) %>%
                  kable_styling(bootstrap_options = 'striped', font_size = 20)",
               "pander(myList$bic)",
               "kable('Full Model Summary', col.names = NULL) %>%
                  kable_styling(bootstrap_options = 'striped', font_size = 20)",
               "pander(myList$model.2)")
当我在控制台中运行for循环时,我得到了预期的输出,但是当我编织我的rmarkdown文件时,我实际上什么也没有得到。没有任何警告、消息、错误或任何东西

有办法做到这一点吗?它是否与
eval(解析(text=)
有关?还有别的东西可以试试吗

后脚本:
@Aaron Montgomery建议添加
cat(eval(parse(text=i))
。我的真实代码有一个小问题。其中一个列表项是由
ggplot()
返回的绘图
cat()
无法处理该请求。这没关系,因为这很容易解决

现在,我的每个分析的代码块如下所示:

{r, results = 'asis'}
myList <- myFunction(X,Y,Z)
myList$plot
for(i in myDisplay){
  cat(eval(parse(text = i)))
}
{r,results='asis'}

myList尝试将您的
eval
包装在
cat()
(连接并打印)中,以引导R写下一些内容:

{r, eval = T, results = 'asis'} #I tried with and without "asis"
for(i in myDisplay){
  cat(eval(parse(text = i)))
}

您可以使用
knitr::knit_child(text=i)
,而不是
eval(parse(…)
,它将返回一个
字符,带有可直接使用的呈现内容(需要
results=“asis”
。@r2evans谢谢,但这将为每个i返回“| | | | | 0%| | | |·| | | | | | | | | | |。有什么我遗漏的吗?不是马上,但我还没有对此运行完整的测试(很抱歉,我正忙于“工作”)。顺便说一句:
库(dplyr、tidyr、kableExtra、pander)
语法不正确。对于第二个参数,它实际上起到了一些作用,但实际上,它被解析为
库(package=“dplyr”,help=“tidyr”,pos=“kableExtra”,lib.loc=“pander”)
,这很可能不是您想要的。@r2evans是的,我在最后一分钟把库调用放在那里,只是为了确认我正在使用的包。我想我会因此而生气:)我在尝试时遇到了一个错误:cat中的错误(eval(parse(text=I)):参数1(类型'list')不能由'cat'处理,这是。。。真的,真的很奇怪。我能够重现您在问题陈述中描述的所有内容,但是这个修复对我来说很有效。我正在我的真实数据集中尝试,所以可能还有另一个问题。我会研究一下。是的,我很好奇它是否适用于你的(非常精巧的)玩具示例。如果是这样的话,那可能很有启发性。我确实工作过。问题是在我的实际输出列表中,其中一个列表项是ggplot2绘图。出于某种原因,cat()不喜欢这样。但我把它拿了出来,它成功了。我可以很容易地解决这个问题。可以在函数中编辑该绘图。谢谢
{r, eval = T, results = 'asis'} #I tried with and without "asis"
for(i in myDisplay){
  cat(eval(parse(text = i)))
}