2013-07-12 107 views
-1

我已經設置了一個腳本來接受用戶輸入。我想使用其中一個輸入來初始化一系列變量。使用變量的內容來創建一個變量名稱的範圍。

X <- 'a' # a is what the user would input from command line

我想要的X內容添加到一系列的變量名。我想最後的名字看起來像:

XXX_a_1 <- #something; XXX_a_2 <- #something; XXX_a_3 <- #something; XXX_a_4 <- #something; XXX_a_5 <- #something; XXX_a_6 <- #something;

有沒有辦法做到這一點?

+1

你爲什麼不只是使用一個向量或列表? – nico

+0

如何將用戶輸入包含在列表/向量中? – user1737564

+2

這是FAQ 7.21(與'paste'或'sprintf'函數結合使用)。該FAQ中最重要的部分是它的最後一點,在他的回答中,它使用列表而不是@nico顯示。 –

回答

2

你不清楚你想用分離的變量做什麼。使用列表或環境更好。例如,您可以創建一個名爲列表如下:

X <- 'a' 
L <- vector("list", 5) 
names(L) <- paste('XXX',X,1:5,sep='_') 

當然,您可以將您的列表使用list2env給獨立的變量:

list2env(L,.GlobalEnv) 
ls(pattern='XXX') 
[1] "XXX_a_1" "XXX_a_2" "XXX_a_3" "XXX_a_4" "XXX_a_5" 
2

可能需要使用粘貼(或paste0)至創建變量名,然後使用分配給一個變量,這個名字你的價值觀:

X <- "a" 
assign(paste0("XXX_",X,"_1"), "value1") 
print(XXX_a_1) 

如果你提供更多的信息,我可以分配的循環幫助se值。

3

R針對向量和列表進行了優化,因此一般情況下,當您發現自己創建了很多變量時,應該問自己一個向量/列表是否會更好用。

你可以做,比如:

user.input <- "test" 
vars <- paste(user.input, 1:5, sep="_") 

my.list <- list() 

for (v in vars) 
    my.list[[v]] = sample(1:10, 1) 

其中給出:

> my.list 
$test_1 
[1] 3 

$test_2 
[1] 5 

$test_3 
[1] 3 

$test_4 
[1] 5 

$test_5 
[1] 5 
+0

謝謝。單個變量本身攜帶列表,並在代碼的不同部分由不同的函數調用。管理列表清單並不是東方的東西,所以我想創建個體變量。我可能應該已經徹底閱讀了FAQ。 – user1737564