2012-09-21 33 views
11

, ben örneğin, "elle" Ortam değişkenlerini ayarlayabilirsiniz:ayarı ortam değişkenleri programlı

Sys.setenv(TODAY = "Friday") 

Ama ortam değişkeni ad ve değer R nesneler saklanır ise? nasıl çalışır

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

:

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

Bunu yazdım

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

ama oldukça çirkin buluyorum. Daha iyi bir yolu var mı? Teşekkür ederim.

cevap

16

Bunu adlandırılmış bağımsız değişkenle işlevini çağırmak için do.call kullanabilirsiniz:

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

bu deneyin:

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

+1 ama CRAN politikalarına karşı olduğundan, bir pakette bunu yapmayın . –

+0

@JoshuaUlrich, lütfen yorumunuzu detaylandırır mısınız? Çünkü, 'Uluslararası' işlevler aynı (katı) geriye dönük uyumluluk gereksinimlerine tabi değildir? – flodel

+3

@flodel: [CRAN Deposu İlkesi] 'ne bakın (http://cran.r-project.org/web/packages/policies.html): "CRAN paketleri yalnızca genel API'yi kullanmalıdır ..." –

İlgili konular