使用pander在pandoc.table中自定义单元格格式

时间:2016-03-07 12:41:08

标签: r pandoc pander

我想使用自定义类来很好地显示pandoc.tables(我正在使用pander),同时编织html或pdf。

由于这个SO question,我找到了一种在控制台中打印得很好的方法。

在此示例中,打印x返回6M 75M 743.5M 0.3M 4.3M:

print.million <- function(x, ...) {
    x <- paste0(round(x / 1e6, 1), "M")
    NextMethod(x, quote = FALSE, ...)
}
x <- c(6e+06, 75000400, 743450000, 340000, 4300000)
class(x) <- "million"
x

但是这种格式化随着pandoc.table而消失:显示原始的,未格式化的值。我也尝试过自定义格式(回答上面的SO问题):

format.million <- function(x,...)paste0(round(unclass(x) / 1e6, 1), "M")
as.data.frame.million <- base:::as.data.frame.factor

但没有成功。

有没有办法让这项工作?我对除了pander之外的解决方案持开放态度,但是kable似乎与我的R版本(R版本3.2.3)不兼容。

1 个答案:

答案 0 :(得分:0)

#include "LinkedList.h" #include <stddef.h> void LinkedList::next() { if(current != NULL) { current = current->next; } } void LinkedList::reset() { if(head != NULL) { current = head; } } void LinkedList::append(int data) { Node* newNode = new Node(); newNode->setData(data); newNode->setNext(NULL); reset(); if(this->current == NULL) { this->head = newNode; } else { while(this->current->getNext() != NULL) { this->current = this->current->getNext(); } this->current->setNext(newNode); } } void LinkedList::removeNode(int data) { this->current = this->head; if(this->current == NULL) return; if(this->current->getNext() == NULL) { delete this->current; this->head = NULL; } else { Node* previous; do { if(this->current->getData() == data) break; previous = this->current; this->current = this->current->getNext(); } while(this->current != NULL); previous->setNext(this->current->getNext()); delete this->current; } } void LinkedList::removeLast() { this->current = this->head; while(this->current->getNext() != NULL) { this->current = this->current->getNext(); } delete this->current; } 方法对print.million没有影响,这是一种不同的S3方法 - 所以你必须在这里定义pander,例如:

pander.million

但要在> x <- c(6e+06, 75000400, 743450000, 340000, 4300000) > pander(x) _6000000_, _75000400_, _743450000_, _340000_ and _4300000_ > pander.million <- function(x, ...) pander(paste0(round(x / 1e6, 1), "M")) > class(x) <- 'million' > pander(x) _6M_, _75M_, _743.5M_, _0.3M_ and _4.3M_ 的表格中使用此内容,我不确定如何为列设置pandoc.table类。你能想出一个可重复的例子吗?

但是,例如,您可以预处理million

data.frame