studio para paquetes paquete los llamar librerias library instalar guardan donde como comando agricolae c r dll packages

c - paquetes - librerias para r studio



¿Deben los paquetes R descargar bibliotecas dinámicas cuando se descargan? (1)

De las mejores practices Hadley''s C:

Al igual que con C ++, siempre que use el código C en su paquete, debe descargar la DLL cuando el paquete esté descargado:

.onUnload <- function (libpath) { library.dynam.unload("mypackage", libpath) }

Escribir R Extensiones, por otro lado, ni siquiera menciona esto. Puedo ver cómo sería correcto descargar los dlls, pero hacerlo me causa problemas extraños con los paquetes que se cargan / descargan / vuelven a cargar (ver ejemplo más abajo). Además, hay algunas menciones que sugieren que quizás no se requiera la descarga. Desde ?library.dynam :

Tenga en cuenta que si es posible o no descargar una DLL y volver a cargar una versión revisada del mismo archivo depende del sistema operativo: consulte la sección ''Valor'' de la ayuda para dyn.unload.

aunque esto no debería afectar a los objetos que no están modificados. Luego está este comentario de Brian Ripley en R-devel :

Habiendo dicho todo eso, mi experiencia es que descargar el DLL a menudo no ayuda si necesita volver a cargarlo (y es por eso por ejemplo que tcltk no descarga su DLL).

Entonces, ¿es aceptable dejar las bibliotecas de C cargadas? Preferiría no tener que investigar por qué están sucediendo cosas como las siguientes (no sucedió antes de comenzar a descargar bibliotecas).

R version 3.1.1 (2014-07-10) Platform: x86_64-apple-darwin13.1.0 (64-bit) > library(alike) # install_github("brodieg/alike", ref="fdaa578e"), if you''re curious > library(data.table) data.table 1.9.2 For help type: help("data.table") > detach("package:data.table", unload=T) > detach("package:alike", unload=T) > library(alike) > library(data.table) Error : .onLoad failed in loadNamespace() for ''data.table'', details: call: address(x) error: object ''Caddress'' not found In addition: Warning messages: 1: In FUN(X[[9L]], ...) : failed to assign RegisteredNativeSymbol for alike to alike since alike is already defined in the ‘data.table’ namespace 2: In FUN(X[[9L]], ...) : failed to assign RegisteredNativeSymbol for typeof to typeof since typeof is already defined in the ‘data.table’ namespace 3: In FUN(X[[9L]], ...) : failed to assign RegisteredNativeSymbol for type_alike to type_alike since type_alike is already defined in the ‘data.table’ namespace Error: package or namespace load failed for ‘data.table’

Las advertencias están relacionadas con funciones alike . alike no se utilizó para descargar sus bibliotecas dinámicas, y los errores anteriores no ocurrieron. Después de implementar la descarga, los errores comenzaron a suceder. Tenga en cuenta que data.table 1.9.2 no data.table 1.9.2 sus DLL, aunque otros paquetes que tampoco descargan DLL no causaron este problema. data.table 1.9.4 funciona bien.


Normalmente, descargar una DLL sería una buena idea. Los recursos que posee se liberarían por completo y la carga no sería un problema.

En R, existe la complicación del entorno R, porque incluso si se descarga una DLL, es posible que haya cierto conocimiento dejado en el R rime. En este caso, el resultado puede ser que la biblioteca DLL re-cargada no comparte el mismo estado inferido que las variables R que pretenden entender el estado de la DLL, y por lo tanto se producen errores.

Creo que sería posible descargar de forma segura un paquete R (DLL y código R), pero sería más fácil dejar las DLL cargadas, a menos que encuentre un uso de recursos particularmente pesado.