1

我想根据 pander 表中的单元格是否加粗来应用一个标准。但是我想将此标准应用于表的单个列而不是其他列。

这是完整的降价文档。

---
title: "Untitled"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```


```{r toy data}

pVal <- as.character(c(0.9, 0.04, 0.6, 0.0003))
FVal <- as.character(c(0.03, 2.51, 1.7, 32.1))
Group <- c("A", "B", "C", "D")
df <- data.frame(Group, FVal, pVal, stringsAsFactors = FALSE)

library(pander)

emphasize.strong.cells(which(df < 0.05, arr.ind = TRUE))

pander(df)
```

这里有两个问题。

首先是满足FVal列中标准的值也被加粗。我希望值 <.05仅pVal列中加粗。我尝试像这样在函数 中设置子集emphasize.strong.cells

emphasize.strong.cells(which(df$pVal < 0.05, arr.ind = TRUE))

或者

emphasize.strong.cells(which(df[,"pVal"] < 0.05, arr.ind = TRUE))

但都没有奏效。我怀疑这种情况正在发生,因为以这种方式进行子集化我没有给emphasize.strong.cells函数一个具有多个维度的对象,但我不确定如何制作这样的对象,其中只有一列对于标准是“活动的”。

第二个问题是pVal列中的最后一个元素在最终的 rmarkdown pdf 中没有加粗,我假设是因为转换为科学记数法。

非常感谢任何解决方案。

4

2 回答 2

1

这个简单的 hack 将为您解决它。

df$pVal <- ifelse(df$pVal < 0.05, paste0("**", df$pVal, "**"), df$pVal)
pander(df)


-----------------------
 Group   FVal    pVal  
------- ------ --------
   A     0.03    0.9   

   B     2.51  **0.04**

   C     1.7     0.6   

   D     32.1   3e-04  
-----------------------

如果将 更改pValas.numeric,最终值也将变为粗体。

于 2016-07-18T03:45:31.123 回答
1

我认为这是一个matrix操作问题,而不是特定于pander,因为如果我对这个问题的理解是正确的,则返回的emphasize.cellsa将被过滤到第 3 列。参见例如:matrixwhich(..., arr.ind = TRUE)

> emphasize.strong.cells(as.matrix(subset(data.frame(which(df < 0.05, arr.ind = TRUE)), col == 3)))
> pander(df)

-----------------------
 Group   FVal    pVal  
------- ------ --------
   A     0.03    0.9   

   B     2.51  **0.04**

   C     1.7     0.6   

   D     32.1   3e-04  
-----------------------
于 2016-07-18T11:38:33.630 回答