2012-03-13 82 views
1

我想将循环内创建的数据分配给相应序列的顺序编号变量。正如所写,本例中的循环会简单地覆盖每一次,因此所有被存储的都是分配给矩阵傀儡的最终数据集。我想要做的是让每个迭代都创建一个名为“somename(counter)”的新变量,并将矩阵傀儡的当前值存储在该变量中。然后,下面的循环应创建变量some​​name0,其值为0,0,0,0,somename1,值为1:4,somename2的值为2,4,6,8。我认为在循环中动态创建变量最好是自动化变量的命名和创建多少个变量。按顺序命名变量(初学者)

例如:

no_its <- 3 
counter <- 0 
while(counter < no_its){ 
    a <- c(counter*(1:4)) 
    stooges <- as.matrix(a) 
    rownames(stooges)<-c("Larry","Moe","Curly","Shemp") 
    counter <- counter+1 
} 
stooges 

output: 
     [,1] 
Larry 2 
Moe  4 
Curly 6 
Shemp 8 
+1

是否有你想使用命名变量而不是创建矩阵或数据框或列表或任何数据的原因structu更适合这项任务的资源? – Dason 2012-03-13 23:57:17

+3

R的做法是让循环将每次迭代存储为列表中的新元素。然后,系统地遍历列表很容易。 – 2012-03-13 23:57:30

+0

http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I-turn-a-string-into-a-variable_003f – 2012-03-14 02:58:30

回答

2

尝试使用列表,它总是会被证明是更好的选择R中

counter <- 0:2 
names(counter) <- paste("somename",seq_along(counter)-1,sep="") 
(result <- lapply(counter, function(counter) counter*1:4)) 
result[["somename1"]] 
## only if you must 
attach(result, pos=2) 
ls(pos=2) 
+0

好的,我可能没有明确表达我的意思情况很好。我的实际代码比上面描述的简单例子复杂得多。我的输入数据是一个带有rownames列表的列表,列出了分类和列名样品。循环的迭代产生输入矩阵的随机(或概率加权)子采样,并因此生成具有恒定数量的列的矩阵,但是具有可变(和未知)数量的行。我需要为每个输出矩阵分配一个名称,以便稍后可以引用它们。 – 2012-03-14 16:11:26

+0

无论“lapply”调用的函数有多复杂,都应该应用相同的想法;这是它的美丽。 – baptiste 2012-03-14 18:51:25

+0

非常感谢。稍微调整一下,你的代码就可以完成这项工作。对业余问题抱歉。 – 2012-03-15 15:22:57

0

如果你想有一个矩阵,然后创建一个空的矩阵,然后填充它:

stooges <- matrix(NA, ncol=4, nrow=4) 
row.names(stooges)<-c("Larry","Moe","Curly","Shemp") 
stooges[1:4, 1:4] <- col(stooges) * 1:4 
stooges 
#--------- 
     [,1] [,2] [,3] [,4] 
Larry 1 2 3 4 
Moe  2 4 6 8 
Curly 3 6 9 12 
Shemp 4 8 12 16