ВЕКТОРИЗАЦИЯ ДЛЯ L OOP В ФУНКЦИИ R - PullRequest
0 голосов
/ 07 мая 2020

У меня есть этот код ниже, который отлично работает с данными Iris, однако тот же код займет много времени, если вы загрузите его с большим набором данных. Я заметил, что проблема в l oop. Как я могу векторизовать l oop и сделать код быстрее.

rm (list = objects (all = TRUE))

today <- Sys.Date()
format(today, format="%d-%b-%Y")

#LIBRARIES
library(openxlsx)
library(readxl)
library(lubridate)
library(zoo)
library(stringr)
library(data.table)


#READ IN DATA SETS
DATA <- iris


#CREATE A NEW EXCEL WORKBOOK
wb <- createWorkbook()
modifyBaseFont(wb, fontSize = 10, fontColour = "black", fontName = "Book 
Antiqua")

#ADD WORKSHEET
addWorksheet(wb,"IRIS DATA",zoom = 92,tabColour = "red2")


#WRITE DATA FUNCTION
WRITEDATAFUNCTION <- function(data,sheet,stRow,stCol){
writeData(wb, paste0(sheet), data,startRow = stRow, startCol = stCol)  
writeDataTable(wb, paste0(sheet), data, startRow = stRow, startCol = 
stCol,tableStyle = 
"none",withFilter = FALSE)

style1 <- createStyle(halign = "CENTER",numFmt ="#,###",fontColour = 
"blue") 

**for(i in stRow:(stRow+nrow(data))){
addStyle(wb, paste0(sheet), style1, rows = i, cols=(stCol): 
(stCol+ncol(data[i,])), gridExpand = TRUE, 
 stack = TRUE)
}**

}


 WRITEDATAFUNCTION(DATA,"IRIS DATA",1,1)

saveWorkbook(wb, file = paste("BBBBBB","-",Sys.Date(),".xlsx"), overwrite = 
TRUE)

1 Ответ

0 голосов
/ 08 мая 2020

В al oop действительно не было необходимости. Я изменил сценарий, как показано ниже, и теперь он намного быстрее.

today <- Sys.Date()
format(today, format="%d-%b-%Y")

#LIBRARIES
library(openxlsx)
library(readxl)
library(lubridate)
library(zoo)
library(stringr)
library(data.table)


#READ IN DATA SETS
 DATA <- iris


#CREATE A NEW EXCEL WORKBOOK
wb <- createWorkbook()
modifyBaseFont(wb, fontSize = 10, fontColour = "black", fontName = "Book 
Antiqua")

#ADD WORKSHEET
addWorksheet(wb,"IRIS DATA",zoom = 92,tabColour = "red2")


#WRITE DATA FUNCTION
WRITEDATAFUNCTION <- function(data,sheet,stRow,stCol){
writeData(wb, paste0(sheet), data,startRow = stRow, startCol = stCol)  
writeDataTable(wb, paste0(sheet), data, startRow = stRow, startCol = 
stCol,tableStyle = 
"none",withFilter = FALSE)

style1 <- createStyle(halign = "CENTER",numFmt ="#,###",fontColour = 
"blue") 
addStyle(wb, paste0(sheet), style1, rows = stRow:(stRow+nrow(data)), cols=(stCol): 
(stCol+ncol(data[i,])), gridExpand = TRUE, stack = TRUE)
}


WRITEDATAFUNCTION(DATA,"IRIS DATA",1,1)

saveWorkbook(wb, file = paste("BBBBBB","-",Sys.Date(),".xlsx"), overwrite = 
TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...