2017-01-17 4 views
1

Juste découvert le paquet googlesheets et le trouve très utile jusqu'à présent. J'aimerais maintenant pouvoir remplacer tout ou partie du contenu d'une feuille existante.Remplacer tout le contenu d'une feuille de route à l'aide du package R googlesheets?

Exemple:

> library(googlesheets) 
> set.seed(10) 
> test1 <- data.frame(matrix(rnorm(10),nrow = 5)) 
> test1 
     X1   X2 
1 0.01874617 0.3897943 
2 -0.18425254 -1.2080762 
3 -1.37133055 -0.3636760 
4 -0.59916772 -1.6266727 
5 0.29454513 -0.2564784 

> gs_new("foo_sheet", input = test1, trim = TRUE) 

Cela crée une nouvelle feuille comme prévu. Disons que nous devons ensuite mettre à jour la feuille (cette donnée est utilisée pour une application brillante hébergée par shinyapps.io, et je préférerais ne pas avoir à redéployer l'application pour changer les références de feuilles).

> test1$X2 <- NULL 
> test1 
     X1 
1 0.01874617 
2 -0.18425254 
3 -1.37133055 
4 -0.59916772 
5 0.29454513 

J'ai essayé de remplacer simplement avec gs_new() mais courir dans le message d'avertissement suivant:

> gs_new("foo_sheet", input = test1, trim = TRUE) 

Warning message: 
At least one sheet matching "foo_sheet" already exists, so you may 
need to identify by key, not title, in future. 

Il en résulte une nouvelle feuille foo_sheet en cours de création avec une nouvelle key, mais ne remplace pas la feuille existante et produira donc une erreur key si nous essayons d'enregistrer la feuille mise à jour avec

gs_title("foo_sheet") 

Error in gs_lookup(., "sheet_title", verbose) : 
"foo_sheet" matches sheet_title for multiple sheets returned by gs_ls() (which should reflect user's Google Sheets home screen). Suggest you identify this sheet by unique key instead. 

Cela signifie que si nous essayons plus tard d'accéder à la nouvelle feuille foo_sheet avec gs_read("foo_sheet"), l'API retournera la feuille d'origine, plutôt que la nouvelle.

> df <- gs_read("foo_sheet") 
> df 
     X1   X2 
1 0.01874617 0.3897943 
2 -0.18425254 -1.2080762 
3 -1.37133055 -0.3636760 
4 -0.59916772 -1.6266727 
5 0.29454513 -0.2564784 

Je crois comprendre qu'une solution possible pourrait être d'abord supprimer la feuille avec gs_delete("test1") puis créer un nouveau. Alternativement on pourrait peut-être vider les cellules avec gs_edit_cells(), mais espérait une certaine forme de fonction d'écrasement.

Merci d'avance!

Répondre

0

Je trouve que la fonction de cellules d'édition est une bonne solution de contournement:

gs_edit_cells(ss = "foo_sheet", ws = "worksheet name", input = test1, anchor = "A1" trim = TRUE, col_names = TRUE) 

En ancrant les données vers le coin supérieur gauche, vous pouvez effectivement écraser toutes les autres données. La fonction d'ajustement éliminera toutes les cellules qui ne doivent pas être mises à jour.

+0

Il existe un problème persistant dans 'gs_edit_cells'. Il pend plusieurs fois. –