虚构的复数单位被'knitr'掉落

时间:2013-09-18 15:19:48

标签: r knitr

我在'knitr'中遇到一个奇怪的问题,R代码包含使用“x + yi”表示法直接输入的复数。有关说明,请参阅最小示例:http://goo.gl/Yj77kI

示例代码在R console中正确评估,并在使用Sweave编译时作为代码块进行评估,结果是:

> 1i^2
[1] -1+0i

然而,当试图在同一个文件上使用'knitr'时,想象中的单位似乎迷路了,我得到的是:

1^2
## [1] 1

有什么想法吗?

干杯, 安杰伊

SessionInfo()的输出:

R version 3.0.0 (2013-04-03)
Platform: x86_64-unknown-linux-gnu (64-bit)

locale:
[1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8          LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8   
[6] LC_MESSAGES=en_US.UTF-8    LC_PAPER=C                 LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] knitr_1.4.1

loaded via a namespace (and not attached):
[1] digest_0.6.3   evaluate_0.4.7 formatR_0.9    highr_0.2.1    stringr_0.6.2  tools_3.0.0   

1 个答案:

答案 0 :(得分:3)

Yihui发现此错误会追溯到getParseData(),但无法在其文本列中呈现i

getParseData(parse(text="3i"))
#   line1 col1 line2 col2 id parent     token terminal text
# 1     1    1     1    2  1      2 NUM_CONST     TRUE    3
# 2     1    1     1    2  2      0      expr    FALSE  

formatR 包(由 knitr 用于“整洁”源代码)和 highr 包(由 knitr使用) 突出显示代码)取决于getParseData(),因此必须在代码块中设置highlight=FALSE, tidy=FALSE才能在knit() ed文档中获得正确的结果。

Yihui's report向R-devel邮件列表Duncan Murdoch announced后,getParseData()将在R-3.0.2发布后的第一个R-patched中修复。{/ p >