2012-09-21 27 views
11

en I, puedo establecer variables de entorno "manualmente", por ejemplo:establecer variables de entorno mediante programación

Sys.setenv(TODAY = "Friday") 

Pero ¿y si el nombre de la variable y el valor medio se almacenan en objetos R?

var.name <- "TODAY" 
var.value <- "Friday" 

me escribió esto:

expr <- paste("Sys.setenv(", var.name, " = '", var.value, "')", sep = "") 
expr 
# [1] "Sys.setenv(TODAY = 'Friday')" 
eval(parse(text = expr)) 

el que hace el trabajo:

Sys.getenv("TODAY") 
# 1] "Friday" 

pero me parece muy feo. ¿Hay una mejor manera? Gracias.

Respuesta

16

Puede utilizar do.call llamar a la función con ese argumento con nombre:

args = list(var.value) 
names(args) = var.name 
do.call(Sys.setenv, args) 
6

Prueba esto:

.Internal(Sys.setenv(var.name, var.value)) 
+2

+1 pero no hacer esto en un paquete, ya que es contra las políticas CRAN . –

+0

@JoshuaUlrich, ¿pueden explicar su comentario? ¿Es porque las funciones '.Internal' no están sujetas a los mismos (estrictos) requisitos de compatibilidad con versiones anteriores? – flodel

+3

@flodel: consulte la [Política de repositorio de CRAN] (http://cran.r-project.org/web/packages/policies.html): "Los paquetes CRAN deben usar solo la API pública ..." –

Cuestiones relacionadas