я написал пакет, который использует DevTools включать внутренние данные:Что такое надежный процесс отсоединения пакета R, чтобы его обновить?
devtools::use_data(.data, internal = T, overwrite = T)
Недавно я изменил, что данные и перестроены пакет. Я хочу, чтобы обновить этот пакет на другой компьютер, который имеет более старый пакет загруженный:
detach('package:myPackage', unload=T)
remove.packages('myPackage')
install.packages(repos=NULL, 'myPackage.zip')
я проверяю, чтобы увидеть, если изменения прошли:
length(myPackage:::.data[[1]])
[1] 2169
Не то, что я ожидал ... возможно, перезагрузка поможет?
Restarting R session...
length(myPackage:::.data[[1]])
[1] 2179
Каков ожидаемый результат.
Чтение помощи Detach предполагает, что это может быть слоеным при некоторых обстоятельствах, например:
Если вы используете библиотеку на упаковке которого пространство имен загружены, он присоединяет экспорт уже загруженное пространство имен , Поэтому отсоединение и повторная установка пакета может не обновлять некоторые или все компоненты пакета и нецелесообразно.
Мое положение здесь в том, что я хочу полностью очистить загруженный пакет, чтобы я мог его обновить. Есть ли способ сделать это без перезапуска R?
EDIT 2016/10/28 - обновленный с воспроизводимым примером ниже
- испытанного на окнах
- требует DevTools
...
# setup package in temp dir
pkg_dir <- file.path(tempfile(), 'dummy.test.pkg')
dir.create(pkg_dir, recursive=T)
devtools::create(pkg_dir)
setwd(pkg_dir)
# read description
desc <- readChar('DESCRIPTION', file.size('DESCRIPTION'))
# create and build package v01
.testval <- c(1,2,3)
devtools::use_data(.testval, internal=T, overwrite=T)
v01 <- sub('\\d+\\.\\d+\\.\\d+\\.\\d+', '0.0.0.1', desc, perl=T)
writeChar(v01, 'DESCRIPTION')
bin01 <- devtools::build(binary=T, path='.')
# create and build package v10
.testval <- c(4,5,6)
devtools::use_data(.testval, internal=T, overwrite=T)
v01 <- sub('\\d+\\.\\d+\\.\\d+\\.\\d+', '1.0.0.0', desc, perl=T)
writeChar(v01, 'DESCRIPTION')
devtools::build(binary=T, path='.')
bin10 <- devtools::build(binary=T, path='.')
# up to this point we haven't loaded either package
sessionInfo()
# install v01
install.packages(repos=NULL, bin01)
cat(dummy.test.pkg:::.testval)
# 1 2 3 (as expected)
# unload the package
unloadNamespace('dummy.test.pkg')
# install v10
install.packages(repos=NULL, bin10)
cat(dummy.test.pkg:::.testval)
# 1 2 3 (NOT 4 5 6 which we expected)
### restart R here ###
cat(dummy.test.pkg:::.testval)
# 4 5 6 (as expected)
Не думайте, что вы можете сделать это безопасно. Есть ли проблема при перезапуске R? – nicola
Это занимает некоторое время. У меня такая же проблема'. Мне любопытно, что делают другие. Что я делаю: удалить пакет, закрыть r, открыть r, установить новый пакет с тем же именем. – Ruben
Два случайных вопроса: 1) есть ли переменная в вашей среде с именем «T»? 2) выполняет вызов 'gc()' после 'detach (..., unload = TRUE)' делать что-то другое? – Jason