2013-07-12 69 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