2016-11-30 137 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 –