我正在尝试使用带有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"
。
答案 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代码进行通信似乎有点笨拙,但它工作正常。我现在明白,块选项不是这样做的方法,但也许有更优雅的解决方案?