Заменить все содержимое таблицы Google с помощью пакета R googlesheets?

Только что обнаружил пакет googlesheets и на данный момент считаю его очень полезным. Теперь я хотел бы иметь возможность заменить все или часть содержимого на существующем листе.

Пример:

> 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)

Как и ожидалось, будет создан новый лист. Предположим, что затем нам нужно обновить лист (эти данные используются для блестящего приложения, размещенного на shinyapps.io, и я бы предпочел не повторно развертывать приложение, чтобы изменить ссылки на лист).

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

Я попытался просто перезаписать с помощью gs_new(), но столкнулся со следующим предупреждением:

> 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.

Это приводит к тому, что новый лист foo_sheet создается с новым key, но не заменяет существующий лист и, следовательно, приведет к ошибке key, если мы попытаемся зарегистрировать обновленный лист с помощью

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.

Это означает, что если позже мы попытаемся получить доступ к новому листу foo_sheet с помощью gs_read("foo_sheet"), API вернет исходный лист, а не новый.

> 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

Насколько я понимаю, одним из возможных решений может быть сначала удалить лист с помощью gs_delete("test1"), а затем создать новый. В качестве альтернативы можно было бы пустые ячейки с gs_edit_cells(), но надеялись на какую-то функцию перезаписи.

Заранее спасибо!


person msoderstrom    schedule 17.01.2017    source источник


Ответы (1)


Я считаю, что функция редактирования ячеек - хорошее решение:

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

Привязав данные к левому верхнему углу, вы можете эффективно перезаписать все остальные данные. Функция обрезки удалит все ячейки, которые не подлежат обновлению.

person Alex Horner    schedule 27.07.2017
comment
Проблема в gs_edit_cells. Зависает несколько раз. - person Lazarus Thurston; 29.01.2018