Выделение минимального значения строки в Pander

Я пытаюсь отобразить фрейм данных в документе RMarkdown с помощью пакета Pander.

Я хотел бы выделить минимальное значение в каждой строке значений. Вот что я пробовал:

df <- replicate(4, rnorm(5)) 
df <- as.data.frame(df)
df$min <- apply(df, 1, min)
emphasize.strong.cells(which(df == df$min, arr.ind = T))
pander(df[1:4])

Когда я это делаю, я получаю сообщение об ошибке:

Error in check.highlight.parameters(emphasize.strong.cells, nrow(t), ncol(t)) : 
  Too high number passed for column indexes that should be kept below 6

Я могу распечатать всю таблицу (со столбцом min) без каких-либо проблем или распечатать неполную таблицу без выделения, но ни один из них не идеален. Я хочу выделить, но я не хочу включать столбец «минимум».

Я предполагаю, что тот факт, что я оставляю некоторые выделенные ячейки вне команды pander, вызывает ошибку.

Есть ли способ обойти это? Или лучший способ сделать это?

Спасибо.

Подвопрос: что, если я хочу выделить минимум в первых нескольких строках и максимум в следующих нескольких. Возможно ли это в одной таблице?


person Kevin Burnham    schedule 03.12.2015    source источник


Ответы (1)


Вместо поиска which с возможностью сопоставления минимумов строк в неправильных строках вы можете легко построить эти индексы массива с помощью простой последовательности (1:N) и вызова which.min для каждой строки, например, с apply:

> df <- replicate(4, rnorm(5))
> df <- as.data.frame(df)
> emphasize.strong.cells(cbind(1:nrow(df), apply(df, 1, which.min)))
> pander(df)

----------------------------------------------
    V1          V2          V3          V4    
----------- ----------- ----------- ----------
  0.6802      0.1409    **-0.7992**   0.1997  

  0.6797    **-0.2212**    1.016      0.6874  

   2.031     -0.009855    0.3881    **-1.275**

   1.376      0.2619    **-2.337**   -0.1066  

**-0.4541**    1.135      -0.1566     0.2912  
----------------------------------------------

Что касается вашего следующего вопроса: вы, конечно, можете сделать это в одной таблице, например, rbind две матрицы, созданные аналогично тому, как описано выше, с which.min и which.max.

person daroczig    schedule 04.12.2015