ddotta / tablexlsx

R package to export data frames from R to xlsx workbook
https://ddotta.github.io/tablexlsx/
Other
16 stars 1 forks source link

Bug in CI with writeDataByGroup() #30

Open ddotta opened 4 months ago

ddotta commented 4 months ago

@JulienBlasco I've made some adjustments but there seems to be a problem with the ` function when running tests in the CI.
https://github.com/ddotta/tablexlsx/actions/runs/9214059458/job/25349391905

Everything is apparently OK on my PC locally though.

Does the following error message mean anything to you?

    ├─base::split(x[, !names(x) %in% group], x[group], sep = groupsep) at tablexlsx/R/writeDataByGroup.R:26:3
    └─base::split.data.frame(x[, !names(x) %in% group], x[group], sep = groupsep)
JulienBlasco commented 4 months ago

J'ai l'impression que add_table fait un appel à writeDataByGroup alors qu'il ne devrait pas :

1. ├─iris %>% toxlsx(path = tempdir()) at test-toxlsx.R:2:3
2. └─tablexlsx::toxlsx(., path = tempdir())
3.   └─tablexlsx::add_table(...) at tablexlsx/R/toxlsx.R:204:5
4.     └─tablexlsx:::writeDataByGroup(...) at tablexlsx/R/add_table.R:113:5
5.       ├─base::split(x[, !names(x) %in% group], x[group], sep = groupsep) at tablexlsx/R/writeDataByGroup.R:26:3

On voit bien qu'il fait appel à wirtedatabygroup dans la ligne 113 de add_table. Mais ce n'est pas normal parce que normalement on n'entre dans cette boucle que si ByGroup est différent de NULL. Cf ci-dessous : https://github.com/ddotta/tablexlsx/blob/5e12edbfc9a1553df71f603afa461e545ed539c5/R/add_table.R#L101-L113 Est-ce que c'est possible que les valeurs de ByGroup soient modifiées à l'intérieur de la fonction ?

ddotta commented 4 months ago

Arfff j'ai l'impression qu'il y a un soucis ici notamment :

https://github.com/ddotta/tablexlsx/blob/5e12edbfc9a1553df71f603afa461e545ed539c5/R/toxlsx.R#L234

Lorsque je lance toxlsx() en mode debug, j'obtiens ceci lorsque j'ai passé l'étape du add_table() (après le bloc de lignes 204)

Browse[2]> output[[df]]
$sheet
[1] "Sheet 1"

$title
[1] "iris"

$column
list()

$footnote1
[1] ""

$footnote2
[1] ""

$footnote3
[1] ""

$groupname
[1] FALSE

On voit bien que output[[df]][["bygroup"]] n'est pas défini donc il n'y a aucune chance pour que le ByGroup = output[[df]][["bygroup"]] fonctionne

ddotta commented 4 months ago

Autre piste/élément :
Dans writeDataByGroup() ce n'est pas gênant si l'argument ByGroup vaut NULL quand on arrive là ?

https://github.com/ddotta/tablexlsx/blob/5e12edbfc9a1553df71f603afa461e545ed539c5/R/add_table.R#L113

Le x[group] ici, il ne doit pas aimer je pense

https://github.com/ddotta/tablexlsx/blob/5e12edbfc9a1553df71f603afa461e545ed539c5/R/writeDataByGroup.R#L26

ddotta commented 4 months ago

@JulienBlasco Je te laisse regarder si tu as le temps, sinon j'essaierai de reprendre ça la semaine prochaine

JulienBlasco commented 4 months ago

Justement, si ByGroup vaut NULL dans add_table, normalement writeDataByGroup n'est pas appelée, vu qu'il y a une condition if (is.null(ByGroup)) {...} else { writeDataByGroup(...) }.

Ce qui est frustrant c'est que les tests marchent aussi chez moi, donc je ne comprends pas ce qui se passe dans la CI.

JulienBlasco commented 3 months ago

fixed by #31