2016-11-30 161 views
1

修订后的标题以澄清焦点。Knitr输出在Rmd和Rnw之间有所不同:data.table输出示例

我们注意到R markdown和data.table以一种令人惊讶的方式进行交互的异常。编织乳胶时也不会发生这种情况。在R会话中没有返回的命令确实会在针织降价输出中返回。我跟踪问题回像下面的命令,不产生R中输出,

````{r} 
poolballs[ , weight2:=2 * weight] 
``` 

但里面Rmarkdown,输出包括所述poolballs DT的满打印。如果我们在LaTeX中编织一个等同的块,也不会发生这种情况。

这产生了一些有趣的HTML输出,因为我写了这样的块,打算只显示前5行

```{r} 
poolballs[ , weight2:=2 * weight] 
head(poolballs) 
``` 

降价解析这两个块相当于

> poolballs[ , weight2:=2 * weight] 
> poolballs 

> head(poolballs) 

这里的要展示的减价文件

--- 
title: "Data Table Guide" 
author: 
- name: Paul Johnson 
    affiliation: Center for Research Methods and Data Analysis, University of Kansas 
    email: [email protected] 

date: "`r format(Sys.time(), '%Y %B %d')`" 
output: 
    html_document: 
    theme: united 
    highlight: haddock 
--- 

```{r setup, include=FALSE} 
knitr::opts_chunk$set(echo=TRUE, comment=NA) 
options(width = 70) 
``` 

```{r make_pb_dt} 
set.seed(234234) 
library(data.table) 
poolballs <- data.table(
    number = 1:15, 
    weight = rnorm(15, 45.7, 0.8), 
    diameter = c(3, 2.9, 3.1) #shows recyling 
) 
poolballs 
``` 

I want the following to show only head in line 2 
```{r} 
poolballs[ , weight2:=2 * weight] 
head(poolballs) 
``` 

比较HTML outp UT:

http://pj.freefaculty.org/scraps/mre-dt.html

对不起,如果这是降价的已知特征。我通过隐藏块来围绕这个皱纹编码,但看起来有些不方便。今天,我很好奇,想问你一些问题。我在LaTeX文件中编写了相同的块,并且不会发生有趣的DT输出问题。我在http:/pj.freefaculty.org/scraps/mre-dt-3.pdf中输入了来自LaTeX的PDF链接

回答

0

在你的最后一个块中,knitr看到你有两个对象试图打印,重新获得两者的输出。这不是一项功能,并已在previous question中解决。

如果你想只打印在该块中的第一个对象的头,你的代码应该是head(poolballs[, weight2:=2 * weight])

+0

这是错误的在几个层次上。首先,第一行不输出!在R中运行它,你应该看到。我没有要求降价打印它。其次,降价行为与noweb文件不同。用Sweave或knitr在LaTeX文件中运行相同的块。第一行中没有一行导致输出。我不想重新编码那一行,我有这样写的目的。比较针织乳胶在这里:http://pj.freefaculty.org/scraps/mre-dt-3.pdf(Rnw相同的文件夹)。第1行不打印。 – pauljohn32

+0

我纠正了,它可能是一个错误,但它绝对不是一个功能。我明白你所做的'data.table'赋值不应该产生输出,但我不认为在html的knitr中的打印方法可以识别这个。它将它看作是调用一个“R”对象并试图相应地打印它。你可以在这里阅读更多关于它的信息:https://stackoverflow.com/questions/15267018/knitr-gets-tricked-by-data-table-assignment –