使用从函数调用的scan()的knitr块

时间:2015-04-27 18:31:23

标签: r knitr sem

在使用LaTeX / beamer的knitr演示中,我想说明sem包,其中几个函数在内部使用scan()来读取,然后解析数据和模型规范。

以下块会出现编织错误

<<union1>>=
library(sem)
union <- readMoments(diag=TRUE,
         names=c('y1', 'y2', 'y3', 'x1', 'x2'))
    14.610
    -5.250  11.017
    -8.057  11.087   31.971
    -0.482   0.677    1.559   1.021
   -18.857  17.861   28.250   7.139  215.662

@

显示在这里:

 <text>:5:13: unexpected numeric constant
4:           14.610
5:     -5.250  11.017
           ^    

即使我在块中使用eval=FALSE,我也会收到错误,但我确实得到了一些合理的输出到PDF文件。

另一个例子,同样给出错误的是这个块指定一个sem模型:

<<union2, eval=FALSE >>=
union.mod <- specifyEquations(covs=c("x1", "x2"))
y1 = gam12*x2
y2 = beta21*y1 + gam22*x2
y3 = beta31*y1 + beta32*y2 + gam31*x1

@

这些都可以在R控制台中使用。如何使用knitr完成它们?

我理解为什么scan()不能在块中工作以及如何使用text参数来解决这个问题,但我不知道如何解决这个问题在块中调用的函数在内部使用scan()

我也理解我可以将数据放在文件union.txt中并使用类似

的内容
<<union1>>=
library(sem)
union <- readMoments(file='union.txt', diag=TRUE,
         names=c('y1', 'y2', 'y3', 'x1', 'x2'))
@

但后来我不知道如何在演示文稿的块中显示此文件的内容。

1 个答案:

答案 0 :(得分:1)

John Fox指出R-Forge上的sem包的开发版现在包含一个text参数,通过从textConnection读取来简化这一点。我现在可以用它作为:

<<union1, size='footnotesize' >>=
library(sem)
union <- readMoments(diag=TRUE,
         names=c('y1', 'y2', 'y3', 'x1', 'x2'),
         text="
    14.610
    -5.250  11.017
    -8.057  11.087   31.971
    -0.482   0.677    1.559   1.021
   -18.857  17.861   28.250   7.139  215.662
")
@