Создание цикла в R, чтобы избежать повторяющегося кода - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь разобраться, используя циклы в R, чтобы избежать повторяющегося кода, который я использовал для форматирования таблицы.

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

library(DT)

##  Create data frame containing test results for Students A - H.   
A <- c(69, 64, 70, 57, 80, 34, 45, 56, 96)
B <- c(70, 74, 68, 76, 71, 56, 56, 45, 30)
C <- c(84, 58, 87, 78, 67, 67, 43, 34, 56)
D <- c(78, 83, 68, 72, 90, 48, 23, 23, 46)    
E <- c(79, 55, 91, 71, 34, 26, 76, 67, 75)    
F <- c(80, 72, 64, 45, 66, 76, 45, 56, 54)    
G <- c(90, 67, 76, 51, 45, 59, 33, 64, 34)    
H <- c(60, 59, 88, 90, 76, 34, 43, 72, 45)    
student_results <- data.frame(A, B, C, D, E, F, G, H)   

##  Create table of data frame, highlighting marks >= 85 in 'aquamarine'
##  Marks < 50 highlighted in 'coral'
datatable(student_results) %>%      
  formatStyle('A',
              backgroundColor = styleInterval(c(50,85), c("coral", "white", "aquamarine"))) %>%      
  formatStyle('B',
              backgroundColor = styleInterval(c(50,85), c("coral", "white", "aquamarine"))) %>%      
  formatStyle('C',
              backgroundColor = styleInterval(c(50,85), c("coral", "white", "aquamarine"))) %>%      
  formatStyle('D',
              backgroundColor = styleInterval(c(50,85), c("coral", "white", "aquamarine"))) %>%      
  formatStyle('E',
              backgroundColor = styleInterval(c(50,85), c("coral", "white", "aquamarine"))) %>%      
  formatStyle('F',
              backgroundColor = styleInterval(c(50,85), c("coral", "white", "aquamarine"))) %>%      
  formatStyle('G',
              backgroundColor = styleInterval(c(50,85), c("coral", "white", "aquamarine"))) %>%      
  formatStyle('H',
              backgroundColor = styleInterval(c(50,85), c("coral", "white", "aquamarine"))

Код, который я придумал, выполняет свою работу, но он очень повторяется.Я пытался выяснить, как получить цикл для запуска функции formatStyle () над каждым столбцом таблицы или найти какую-то другую функцию, которая выполняет ту же задачу, но не имела успеха.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Трубопровод a %>% b() %>% b() %>% b() - это то же самое, что и повторная оценка b(b(b(a))), поэтому ваша версия цикла for будет выглядеть как повторное применение вашей функции:

> sr = datatable(student_results)
> for(L in LETTERS[1:8]){
     sr = formatStyle(sr, L, 
          backgroundColor = styleInterval(
              c(50,85), c("coral", "white", "aquamarine")))}
> sr
0 голосов
/ 05 февраля 2019
library(DT)
#colnames(student_results)[2:ncol(student_results)] #if you need selected columns
datatable(student_results) %>% 
          formatStyle(colnames(student_results),backgroundColor = styleInterval(c(50,85), c("coral", "white", "aquamarine")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...