web-dev-qa-db-fra.com

Erreur lors de l'impression de data.frame dans Excel à l'aide du package XLSX dans R

La trame de données est visible sans aucune erreur. Mais quand le même est imprimé en utilisant la fonction write.xlsx du paquet XLSX, cela donne l'erreur.

Error in .jcall(cell, "V", "setCellValue", value) : 
  method setCellValue with signature ([D)V not found.

La sortie du data.frame ressemble à:

Timestamp         qs          pqs        logqs         es         p_imp      dep    r_dep       agg_rtn
               (time)      (dbl)        (dbl)        (dbl)      (dbl)         (dbl)    (dbl)    (dbl)         (dbl)
1 2015-05-04 09:29:59 0.05788732 0.0007478696 0.0007478545 0.09633803 -0.0446830986 3533.518 274079.9 -0.0006432937
2 2015-05-04 10:00:00 0.04948394 0.0006362707 0.0006362707 0.07586009  0.0088016055 2416.431 187953.1  0.0000000000
3 2015-05-04 10:30:00 0.05554795 0.0007142532 0.0007142532 0.06417808 -0.0002739726 3245.574 252422.0  0.0000000000
4 2015-05-04 10:59:59 0.04863014 0.0006194244 0.0006194244 0.08434442  0.0024951076 3563.401 279503.9  0.0000000000
5 2015-05-04 11:30:00 0.05761986 0.0007319037 0.0007319037 0.07851027  0.0154965753 2010.943 158429.1 -0.0006339144
6 2015-05-04 12:00:00 0.04957627 0.0006285051 0.0006285051 0.07025424  0.0070762712 1819.908 143546.0  0.0000000000
Variables not shown: vol_30_sum (dbl), vol_30_mean (dbl), p_return_sqr (dbl), p_return_mean (dbl), Lim_or_out (dbl),
  closing_price (dbl), closing_vol (dbl)

Veuillez aider à résoudre cette erreur.

30
gaurav kumar

Toujours pas d'exemple reproductible, mais à partir de votre class(q1) il semble que q1 est un tbl_df (le type de trame de données que le package dplyr produit) tandis que write.xlsx attend un data.frame.

Essayez de donner write.xlsx une plaine data.frame comme il s'y attend. par exemple.

write.xlsx(as.data.frame(q1), ...)

Voici un exemple reproductible (c'est-à-dire que vous pouvez le copier-coller dans votre session R pour reproduire le bug + le correctif).

library(dplyr)
iris2 <- tbl_df(iris)
class(iris2) # like yours
# [1] "tbl_df"     "tbl"        "data.frame" 

# Now let's try to write to XLSX using command as mentioned in your comments
library(xlsx)
write.xlsx(iris2, file='test.xlsx', sheetName="Sheet1", col.names=TRUE, row.names=FALSE, append=TRUE)
# Error in .jcall(cell, "V", "setCellValue", value) : 
#   method setCellValue with signature ([D)V not found
# In addition: Warning message:
# In if (is.na(value)) { :
#  the condition has length > 1 and only the first element will be used
# ^--- we can reproduce your error. This is the point of a reproducible example, so we can see if our fixes work for you.

Essayons maintenant de le corriger en nous assurant que write.xlsx obtient un data.frame, pas un tbl_df!

write.xlsx(as.data.frame(iris2), file='test.xlsx', sheetName="Sheet1", col.names=TRUE, row.names=FALSE, append=TRUE)
# huzzah!
58
mathematical.coffee

Je trouve que cela se produit lors du regroupement des variables avec dplyr. Si vous terminez une chaîne avec%>% ungroup (), il semble résoudre

3
Michael Bellhouse

Il semble qu'il y ait un bug avec le format Date/Heure de la première colonne (Horodatage). Si vous convertissez la première colonne en caractère, cela devrait fonctionner. Vous pouvez donc modifier votre première colonne en

q1[,1] <- as.character(q1[,1])

et essayez à nouveau...

0
Dimitris Patikas