尝试将数据导出到 excel,有效,但代码笨拙地重复每个 sheet
Trying to export data to excel, works but the code is clunky-repeated per sheet
我正在将一些代码导出到 excel,并尝试将其导出到超过 3 张工作簿的 1 个工作簿。但是为了做到这一点,我已经将每个命令重复了三次,这不是一个好方法吗?也许有人可以告诉我哪里出错了?
library(r2excel)
#> Loading required package: xlsx
sample_prime1 <- 1:4
sample_prime2 <- 10:14
sample_prime3 <- 22:26
# Create an Excel workbook.
filename <- "validitycheck.xlsx" #The name of the file that will be saved
wb <- createWorkbook(type="xlsx") #Creating an excel workbook
# Create a sheet in that workbook to contain the data table
sheet1 <- createSheet(wb, sheetName = "prime1")
sheet2 <- createSheet(wb, sheetName = "prime2")
sheet3 <- createSheet(wb, sheetName = "prime3")
# Add table : add a data frame for sheet 1
xlsx.addHeader(wb, sheet1, value="Validty for prime 1")
xlsx.addLineBreak(sheet1, 1)
xlsx.addTable(wb, sheet1, sample_prime1,
fontColor="darkblue", fontSize=14,
rowFill=c("white", "lightblue"),
startCol=2,
row.names=FALSE,
col.names = FALSE)
# Add table : add a data frame for sheet 2
xlsx.addHeader(wb, sheet2, value="Validty for prime 2")
xlsx.addLineBreak(sheet2, 1)
xlsx.addTable(wb, sheet2, sample_prime2,
fontColor="darkblue", fontSize=14,
rowFill=c("white", "lightblue"),
startCol=2,
row.names=FALSE,
col.names = FALSE)
# Add table : add a data frame for sheet 3
xlsx.addHeader(wb, sheet3, value="Validty for prime 3")
xlsx.addLineBreak(sheet3, 1)
xlsx.addTable(wb, sheet3, sample_prime3,
fontColor="darkblue", fontSize=14,
rowFill=c("white", "lightblue"),
startCol=2,
row.names=FALSE,
col.names = FALSE)
也许你可以制作一个函数并调用它 3 次?我没有这个包,所以我无法测试,但类似的东西可能有用。
addSheet <- function(wb,sheetName,value,data) {
# Create a sheet in that workbook to contain the data table
sheet <- createSheet(wb, sheetName = sheetName)
# Add table : add a data frame for sheet 1
xlsx.addHeader(wb, sheet, value=value)
xlsx.addLineBreak(sheet, 1)
xlsx.addTable(wb, sheet, data,
fontColor="darkblue", fontSize=14,
rowFill=c("white", "lightblue"),
startCol=2,
row.names=FALSE,
col.names = FALSE)
}
然后你可以运行
filename <- "validitycheck.xlsx"
wb <- createWorkbook(type="xlsx")
addSheet(wb,"prime1","Validty for prime 1",sample_prime1)
addSheet(wb,"prime2","Validty for prime 2",sample_prime2)
addSheet(wb,"prime3","Validty for prime 3",sample_prime3)
@DavidMas 的想法很棒(非常感谢您向我们传授这一点)。您可以改进函数并将其概括为 n
数据,使用列表存储数据和名称向量。然后你可以使用一个循环来打印数据。这里的代码:
library(r2excel)
#Data
sample_prime1 <- 1:4
sample_prime2 <- 10:14
sample_prime3 <- 22:26
#Store in a list
List <- list(sample_prime1,sample_prime2,sample_prime3)
#Function
myfun <- function(wb,name,df) {
# Create object
sheet <- createSheet(wb, sheetName = name)
# Add headers
xlsx.addHeader(wb, sheet, value=paste0('Validty for prime ',name))
xlsx.addLineBreak(sheet, 1)
xlsx.addTable(wb, sheet, data.frame(df),
fontColor="darkblue", fontSize=14,
rowFill=c("white", "lightblue"),
startCol=2,
row.names=FALSE,
col.names = FALSE)
}
#Create workbook
filename <- "validitycheck.xlsx"
wb <- createWorkbook(type="xlsx")
#Loop
#Vector for names
vnames <- paste0('prime',1:length(List))
#Code
for(i in 1:length(List))
{
myfun(wb,vnames[i],List[i])
}
我正在将一些代码导出到 excel,并尝试将其导出到超过 3 张工作簿的 1 个工作簿。但是为了做到这一点,我已经将每个命令重复了三次,这不是一个好方法吗?也许有人可以告诉我哪里出错了?
library(r2excel)
#> Loading required package: xlsx
sample_prime1 <- 1:4
sample_prime2 <- 10:14
sample_prime3 <- 22:26
# Create an Excel workbook.
filename <- "validitycheck.xlsx" #The name of the file that will be saved
wb <- createWorkbook(type="xlsx") #Creating an excel workbook
# Create a sheet in that workbook to contain the data table
sheet1 <- createSheet(wb, sheetName = "prime1")
sheet2 <- createSheet(wb, sheetName = "prime2")
sheet3 <- createSheet(wb, sheetName = "prime3")
# Add table : add a data frame for sheet 1
xlsx.addHeader(wb, sheet1, value="Validty for prime 1")
xlsx.addLineBreak(sheet1, 1)
xlsx.addTable(wb, sheet1, sample_prime1,
fontColor="darkblue", fontSize=14,
rowFill=c("white", "lightblue"),
startCol=2,
row.names=FALSE,
col.names = FALSE)
# Add table : add a data frame for sheet 2
xlsx.addHeader(wb, sheet2, value="Validty for prime 2")
xlsx.addLineBreak(sheet2, 1)
xlsx.addTable(wb, sheet2, sample_prime2,
fontColor="darkblue", fontSize=14,
rowFill=c("white", "lightblue"),
startCol=2,
row.names=FALSE,
col.names = FALSE)
# Add table : add a data frame for sheet 3
xlsx.addHeader(wb, sheet3, value="Validty for prime 3")
xlsx.addLineBreak(sheet3, 1)
xlsx.addTable(wb, sheet3, sample_prime3,
fontColor="darkblue", fontSize=14,
rowFill=c("white", "lightblue"),
startCol=2,
row.names=FALSE,
col.names = FALSE)
也许你可以制作一个函数并调用它 3 次?我没有这个包,所以我无法测试,但类似的东西可能有用。
addSheet <- function(wb,sheetName,value,data) {
# Create a sheet in that workbook to contain the data table
sheet <- createSheet(wb, sheetName = sheetName)
# Add table : add a data frame for sheet 1
xlsx.addHeader(wb, sheet, value=value)
xlsx.addLineBreak(sheet, 1)
xlsx.addTable(wb, sheet, data,
fontColor="darkblue", fontSize=14,
rowFill=c("white", "lightblue"),
startCol=2,
row.names=FALSE,
col.names = FALSE)
}
然后你可以运行
filename <- "validitycheck.xlsx"
wb <- createWorkbook(type="xlsx")
addSheet(wb,"prime1","Validty for prime 1",sample_prime1)
addSheet(wb,"prime2","Validty for prime 2",sample_prime2)
addSheet(wb,"prime3","Validty for prime 3",sample_prime3)
@DavidMas 的想法很棒(非常感谢您向我们传授这一点)。您可以改进函数并将其概括为 n
数据,使用列表存储数据和名称向量。然后你可以使用一个循环来打印数据。这里的代码:
library(r2excel)
#Data
sample_prime1 <- 1:4
sample_prime2 <- 10:14
sample_prime3 <- 22:26
#Store in a list
List <- list(sample_prime1,sample_prime2,sample_prime3)
#Function
myfun <- function(wb,name,df) {
# Create object
sheet <- createSheet(wb, sheetName = name)
# Add headers
xlsx.addHeader(wb, sheet, value=paste0('Validty for prime ',name))
xlsx.addLineBreak(sheet, 1)
xlsx.addTable(wb, sheet, data.frame(df),
fontColor="darkblue", fontSize=14,
rowFill=c("white", "lightblue"),
startCol=2,
row.names=FALSE,
col.names = FALSE)
}
#Create workbook
filename <- "validitycheck.xlsx"
wb <- createWorkbook(type="xlsx")
#Loop
#Vector for names
vnames <- paste0('prime',1:length(List))
#Code
for(i in 1:length(List))
{
myfun(wb,vnames[i],List[i])
}