2012-09-21 6 views
11

w R, mogę ustawić zmienne środowiskowe „ręcznie”, na przykład:Ustawianie zmiennych środowiskowych programowo

Sys.setenv(TODAY = "Friday") 

Ale co, jeśli wartość zmiennej nazwa i otoczenie są przechowywane w obiektach R?

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

Napisałem ten:

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

który działa:

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

ale uważam, że to dość brzydki. Czy istnieje lepszy sposób? Dziękuję Ci.

Odpowiedz

16

do.call można użyć do wywołania funkcji z tej nazwie argumentu:

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

Spróbuj tego:

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

+1 ale nie rób tego w pakiecie, jak to wbrew polityce Cran . –

+0

@JoshuaUlrich, proszę o rozwinięcie swojego komentarza? Czy to dlatego, że funkcje '.Internal' nie podlegają tym samym (ścisłym) wymaganiom zgodności wstecznej? – flodel

+3

@flodel: zobacz [Polityka Repozytorium CRAN] (http://cran.r-project.org/web/packages/policies.html): "Pakiety CRAN powinny używać tylko publicznego API ..." –