2012-09-21 115 views
11

在R,我可以設置環境變量「手動」,例如:設置環境變量編程

Sys.setenv(TODAY = "Friday") 

但如果環境變量名和值存入R對象?

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

我寫了這個:

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

這不工作:

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

,但我覺得它很醜陋。有沒有更好的辦法?謝謝。

回答

16

您可以使用do.call調用函數與命名的參數:

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

試試這個:

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

+1,但不這樣做在一個包,因爲它是針對CRAN政策。 –

+0

@JoshuaUlrich,請您詳細說明您的評論?是否因爲'.Internal'函數不受相同(嚴格)向後兼容性要求的限制? – flodel

+3

@flodel:請參閱[CRAN存儲庫策略](http://cran.r-project.org/web/packages/policies.html):「CRAN軟件包應該只使用公共API ...」 –