迭代地在for循环中创建变量

时间:2014-10-04 21:35:41

标签: r

我想运行一个执行向量矩阵运算的for循环,并返回一个以迭代号为后缀的向量。 例如: 如果我有一个5乘5的矩阵,我想一次取矩阵的每一列(在for循环的每次迭代)并处理一堆操作,并在它的末尾得到一个标记为v_i其中i引用列索引以及循环的迭代次数。我知道这可以在for循环中实现,但我不确定如何在每次迭代时标记变量。

例如,如果我必须在SAS中执行此操作,我会使用v& i并放入一个宏并运行它。但不确定这个迭代变量标记的R等价物是什么。

非常感谢任何帮助。我下周要完成一份作业,我正处于真正的关键时刻。 谢谢!

2 个答案:

答案 0 :(得分:0)

从这样的循环中创建对象并不是一个好的编程习惯。最好将它们放在一个对象(比如列表)中,并从循环内部填充列表。您甚至可以在运行循环之前创建列表。

我不确定我是否理解正确,但这是一个计算每列平均值的非常简单的示例。对我来说,你的问题并没有真正揭示你想要完成的事情。

mat <- matrix(1:25, ncol=5)

lst <- as.list(numeric(ncol(mat)))
names(lst) <- sapply(1:ncol(mat), function(x) paste("v_",x,sep=""))

myfun <- mean

for(i in 1:ncol(mat)){
  lst[[i]] <- myfun(mat[,i])
}

干杯!

答案 1 :(得分:0)

如果您花一点时间了解R的工作原理以及它与SAS的不同之处,那么您将获得更好的服务。幸运的是,有专门用于这种学习曲线的资源 - 请参阅here

在这种情况下,您根本不需要使用循环。我也怀疑你实际上想要一个像SimonG建议的列表输出,而不是一个简单的向量。这是一个例子:

mat <- matrix(1:25, ncol=5)
#Give the matrix some names
colnames(mat) <- paste0("col_", 1:5)
#compute the column means
colMeans(mat)
---

col_1 col_2 col_3 col_4 col_5 
    3     8    13    18    23