Ich habe ein Paket geschrieben, die devtools enthalten interne Daten verwendet:Was ist ein zuverlässiger Prozess zum Abnehmen eines R-Pakets, um es zu aktualisieren?
devtools::use_data(.data, internal = T, overwrite = T)
Ich änderte vor kurzem, dass die Daten und das Paket wieder aufgebaut. Ich möchte auf einen anderen Rechner das Paket aktualisieren, die das ältere Paket hat derzeit geladen:
detach('package:myPackage', unload=T)
remove.packages('myPackage')
install.packages(repos=NULL, 'myPackage.zip')
ich überprüfen, um zu sehen, ob die Änderungen durchgemacht haben:
length(myPackage:::.data[[1]])
[1] 2169
Nicht das, was ich erwartet hatte ... vielleicht hilft ein Neustart?
Restarting R session...
length(myPackage:::.data[[1]])
[1] 2179
Welches ist das erwartete Ergebnis.
Lesen der Hilfe für detach legt nahe, dass es unter bestimmten Umständen flockig sein kann, zum Beispiel:
Wenn Sie Bibliothek auf einem Paket, dessen Namespace geladen wird, legt er die Exporte des bereits geladenen Namensraum . Das Abnehmen und erneutes Anhängen eines Pakets kann daher einige oder alle Komponenten des Pakets nicht aktualisieren und wird nicht empfohlen.
Meine Situation hier ist, dass ich das geladene Paket vollständig löschen möchte, damit ich es aktualisieren kann. Gibt es eine Möglichkeit, dies ohne Neustart von R zu tun?
2016/10/28 EDIT - mit einem reproduzierbaren Beispiel aktualisiert unter
- auf Windows getestet
- erfordert 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)
Glauben Sie nicht, dass Sie es sicher tun können. Gibt es ein Problem beim Neustart von R? – nicola
Es braucht etwas Zeit. Ich habe das gleiche Problem'. Ich bin gespannt was andere machen. Was ich mache: Paket entfernen, r schließen, r öffnen, neues Paket mit gleichem Namen installieren. – Ruben
Zwei zufällige Fragen: 1) Gibt es in Ihrer Umgebung eine Variable namens "T"? 2) macht einen Aufruf an 'gc()' nach 'detach (..., unload = TRUE)' etwas anderes tun? – Jason