Фон
Я пишу .R
скрипт на своем компьютере (Windows), который (1) должен хранить Log.xlsx
файл, записывающий данные о его запусках; и (2) будет запускаться коллегой на отдельной виртуальной машине (также Windows).
Требования
Я ищу пакет в R, который (1) позволит мне добавлять данные R (из data.frame
) сразу после последней непустой строки на существующем листе в этой существующей рабочей книге Log.xlsx
; в то время как (2) остается легко переносимым, так что любые необходимые пакеты могут быть автоматически установлены самим сценарием (через pacman::p_load()
*), если они еще не установлены на виртуальной машине.
* Я обеспечиваю наличие pacman
с помощью base
функционала:
if(!"pacman" %in% installed.packages()) {
install.packages("pacman")
}
Настройки
Поскольку этот журнал будет быстро расти — скрипт запускается ежедневно и будет регистрировать многие десятки записей за один запуск — я бы предпочел избегать подхода, предложенного здесь, который просто загружает все существующие данные рабочего листа в R, где он объединяет наборы данных, а затем (поверх) записывает результат в виде нового файла .xlsx
(или .csv
). Я также предпочел бы избежать (лучшего?) подхода, предложенного здесь, который аналогичным образом загружает и объединяет все в R, но затем перезаписывает лист внутри рабочей книги, а не перезаписывать саму книгу.
Короче говоря, я настоятельно предпочитаю гранулированную возможность добавления, чтобы просто добавлять новые данные в конец существующего листа без необходимости загружать, объединять и (перезаписывать) данные всего листа (не говоря уже о рабочей книге) в R.
Блокпост
Я исследовал пакеты xlsx
, openxlsx
(которые, кажется, имеют некоторые проблемы со стабильностью) и XLConnect
. Хотя XLConnect
кажется особенно актуальным (см. XLConnect::appendWorksheet()
) и переносимым даже между операционными систем остается проблема Java. На данный момент pacman::p_load()
успешно установит XLConnect
и xlsx
(среди прочих), однако любая попытка загрузить эти два пакета (через library()
) предсказуемо приведет к
Error: package or namespace load failed for ‘xlsx’:
.onLoad failed in loadNamespace() for 'rJava', details:
call: fun(libname, pkgname)
error: JAVA_HOME cannot be determined from the Registry
Очевидно, я мог бы исправить эту проблему на моем компьютере, следуя инструкциям здесь для установки версии Java (32- или 64-разрядной), совместимой с моей версией R. Однако я хотел бы, чтобы сценарий был самостоятельным, например что он обрабатывает свои собственные зависимости и безболезненно работает на виртуальной машине, независимо от того, какие битовые версии R и Java установлены на виртуальной машине. В частности, я не хочу заставлять своего коллегу вручную устанавливать соответствующую версию Java.
В заключение
В то время как второе решение (которое, очевидно, позволяет избежать контрольно-пропускного пункта Java) подойдет в крайнем случае, любая помощь в достижении моего списка Предпочтения будут очень признательны!
xlsx
? Вы можете использоватьfwrite
вdata.table
, который может добавляться к существующему файлу, но сохраняется как текстовый файл. - person MKa   schedule 04.06.2021.xlsx
(или электронной таблице в целом), заключается в том, что мне нужно хранить табличные данные, возможно, о различных объектах. Вкладки Excel (листы в рабочих книгах) позволяют гибко хранить таблицы нескольких сущностей в одном центральном журнале. Кроме того, в Excel не используются разделители символов, и я хочу полностью избежать возможных конфликтов между моими текстовыми данными и разделителями в таких форматах, как.csv
. - person Greg   schedule 04.06.2021.xlsx
, но записываю их в базу данных, например.SQLite
и поместить каждую вкладку в отдельную таблицу тоже может быть вариантом. - person MKa   schedule 07.06.2021/Log
(а не файлLog.xlsx
) прямо рядом со сценарием, и внутри этого подкаталога я мог бы иметь один текстовый файл (например,.csv
) для каждого листа, который был бы в файле.xlsx
. Затем записи (строки текста) можно было бы итеративно добавлять к каждому листу (текстовому файлу) в книге (подкаталоге) без необходимости загружать всю книгу Excel (или любой другой файл) в R, а затем переписывать ее, чтобы включить новые строки. . Это будет поддерживать табличные журналы локально и переносимо. - person Greg   schedule 07.06.2021