2012-03-24 8 views
2

Wie der Titel vorschlagen, möchte ich das oben tun. Beispiel unten:Verwenden von Listennamen als Namen für Blätter mit XLConnect

library(stringr) 
library(XLConnect) 

df <- data.frame(do.call("rbind", lapply(1:10, function(i) rnorm(10)))) 
df.list <- rep(list(df), 10) 
names(df.list) <- paste("DataFrame", str_pad(1:length(df.list), 2, pad = "0"), sep = "") 

df.list.workbook <- loadWorkbook("df.list.workbook.xlsx", create = TRUE) 
lapply(1:length(df.list), function(i) createSheet(df.list.workbook, name = names(df.list[i]))) 
lapply(df.list[1:length(df.list)], function(i) writeWorksheet(df.list.workbook, i, sheet = names(i))) 

Die letzte Zeile ist, wo es einen Fehler wirft:

Error: IllegalArgumentException (Java): Sheet index (-1) is out of range (0..9) 

Um dies zu beheben, habe ich versucht:

lapply(df.list[1:length(df.list)], function(i) print(names(i))) 

Und erkennen, dass die Namen der Spalten wurden an die Blattvariable übergeben. Irgendwelche Ideen, um das zu überwinden?

+0

'Namen (df.list) [i]'? – James

+0

@James, die mir 'Fehler im Ausdruck (Namen (df.list) [i]): Fehler bei der Bewertung des Arguments 'x' bei der Auswahl einer Methode für die Funktion 'print': Fehler in Namen (df.list) [i]: ungültiger tiefgestellter Typ 'list'' – Ben

+0

Ah, ich verstehe. Müsste auch ändern in: 'lapply (seq_along (df.list), Funktion (i) writeWorksheet (df.list.workbook, df.list [[i]], sheet = Namen (df.list) [i]) '. Müssen Sie über den Index statt der Liste plätschern. – James

Antwort

4

Sie müssen lapply über den Index anstelle der Liste:

lapply(seq_along(df.list), function(i) writeWorksheet(df.list.workbook, df.list[[i]], sheet = names(df.list)[i])) 
2

XLConnect ist an vielen Orten vektorisiert. In Ihrem Fall gilt dies für createSheet und writeWorksheet, so können Sie schreiben:

df.list.workbook <- loadWorkbook("df.list.workbook.xlsx", create = TRUE) 
createSheet(df.list.workbook, name = names(df.list)) 
writeWorksheet(df.list.workbook, data = df.list, sheet = names(df.list)) 
saveWorkbook(df.list.workbook) 
Verwandte Themen