带参数的knitr外部代码块

时间:2014-09-22 14:21:51

标签: r latex knitr

我正在尝试使用带有knitr的外部代码块并想要参数化块。也许我完全误解了代码块选项的概念,但这是我试图做的。在我的Rnw文件中,我有:

\documentclass[12pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}

\begin{document}

<<locate_external_code, include=FALSE, echo=FALSE, message=FALSE, warning=FALSE>>=
library(knitr)
read_chunk('mwex.r')
@

<<setUpMatrices, echo=TRUE, include=FALSE, message=FALSE, warning=FALSE>>=
@

Want to select M1, M2, etc. by `calling' getMatrix setting parameter select to the required value e.g. M1

<<getMatrix, echo=FALSE, include=TRUE, results='asis', message=FALSE, warning=FALSE, select='M1'>>=
@

e.g. M2
<<getMatrix, echo=FALSE, include=TRUE, results='asis', message=FALSE, warning=FALSE, select='M2'>>=
@

The calls don't work but I can get the matrices like this: \newline
<<getM1, echo=FALSE, include=TRUE, results='asis', message=FALSE, warning=FALSE>>=
@

\end{document}

在我的r档案中,我有:

## ----setUpMatrices
library(xtable)
NP<-matrix(c(0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1/3, 1/3, 1/3, 0, 0, 1/3, 1/3, 1/3, 0, 0),5,5,byrow=TRUE)
UP<-matrix(c(1/3, 1/3, 1/3, 0, 0),1,5,byrow=TRUE)
mat<-xtable(NP,align=rep('',ncol(NP)+1))
M1<-paste('$',print(mat, floating=FALSE, comment=FALSE,tabular.environment="pmatrix", hline.after=NULL, include.rownames=FALSE, include.colnames=FALSE),'$',sep='')

mat<-xtable(UP,align=rep('',ncol(NP)+1))
M2<-paste('$',print(mat, floating=FALSE, comment=FALSE,tabular.environment="pmatrix", hline.after=NULL, include.rownames=FALSE, include.colnames=FALSE),'$',sep='')


## ----getMatrix
cat(select)

## ----getM1
cat(M1)

getM1工作正常,但参数化getMatrix调用会导致r报告"Error: object 'select' not found"

2 个答案:

答案 0 :(得分:0)

似乎你有一个误解:代码块选项不是你工作区中的R对象。您有一个块选项select='M1',这并不意味着它会在您的工作区中为您提供变量select。块选项用于 knitr 来调整代码块的行为。

您对M1没有问题,因为您在代码块setUpMatrices中定义了它。

答案 1 :(得分:0)

谢谢你@Yihui。

为了实现我的Rnw代码目标,我写了:

<<echo=FALSE>>=
select<-'M2'
@
<<getMatrix, echo=FALSE, include=TRUE, results='asis', message=FALSE, warning=FALSE>>=
@ 

在r文件中我有

## ----getMatrix
cat(get(select))

有两个块以这种方式与r代码进行通信似乎有点笨拙,但它工作正常。我现在明白,块选项不是这样做的方法,但也许有更优雅的解决方案?