titles randomforest plots mtext ggplot change r version packages

randomforest - Requiere versión mínima del paquete R



randomforest r (3)

Después de leer el pseudocódigo de Paul, aquí está la función que he escrito.

use <- function(package, version=0, ...) { package <- as.character(substitute(package)) library(package, ..., character.only=TRUE) pver <- packageVersion(package) if (compareVersion(as.character(pver), as.character(version)) < 0) stop("Version ", version, " of ''", package, "'' required, but only ", pver, " is available") invisible(pver) }

Funciona básicamente igual que library() , pero tiene un argumento de version adicional:

> use(plyr, 1.6) > use(ggplot2, ''0.9'') Error in use(ggplot2, "0.9") : Version 0.9 of ''ggplot2'' required, but only 0.8.9 is available

Acabo de darme cuenta de que no hay ningún argumento de version para las funciones R require() o de library() . ¿Qué hace la gente cuando necesita asegurarse de tener al menos alguna versión mínima de un paquete, de modo que, por ejemplo, sepan que se solucionó algún error, o que alguna característica está disponible, o lo que sea?

Soy consciente de las cosas de Depends para los autores de paquetes, pero estoy buscando algo para usar en scripts, entornos interactivos, archivos de org-mode , fragmentos de código, etc.


No tengo conocimiento de tal función, pero debería ser bastante fácil hacer una. Puede basarse en sessionInfo() o packageVersion() . Después de cargar los paquetes necesarios para el script, puede recopilar los números de paquetes desde allí. Una función que verifica el número de versión sería (en pseudo código, ya que no tengo tiempo en este momento):

check_version = function(pkg_name, min_version) { cur_version = packageVersion(pkg_name) if(cur_version < min_version) stop(sprintf("Package %s needs a newer version, found %s, need at least %s", pkg_name, cur_version, min_version)) }

Llamarlo sería como:

library(ggplot2) check_version("ggplot2", "0.8-9")

Aún necesita analizar los números de versión en algo que permita la comparación cur_version < min_version , pero la estructura básica sigue siendo la misma.


Podrías usar packageVersion() :

packageVersion("stats") # [1] ‘2.14.1’ if(packageVersion("stats") < "2.15.0") { stop("Need to wait until package:stats 2.15 is released!") } # Error: Need to wait until package:stats 2.15 is released!

Esto funciona porque packageVersion() devuelve un objeto de la clase package_version para el cual < comporta como nos gustaría (lo que < no hará cuando se comparan dos cadenas de caracteres usando su orden lexicográfico).