如何获得一个不覆盖结果的循环?

时间:2014-02-12 18:25:31

标签: r for-loop matrix

我觉得愚蠢地问这么简单的问题,但我似乎无法找到办法,虽然我确信有很多办法。解释我的问题最简单的方法可能是展示一个例子,我有一些我想要应用的程序。

FUN<- function(v1, v2, v3){
  n=length(v1)
  res <- vector()
  for (i in 1:n){
    if(v1[i]>v2[i]) (res[i] <- v3[i+2])
      else(res[i] <- v1[i+2])}
  return(res)}

输入是两个向量和一个矩阵,都是相同的长度

matrix <- matrix(runif(30),ncol=3) 
v2 <- runif(10)
v3 <- rnorm(10)

因此,当我运行包含函数的for循环时,我可以执行程序i次,每次输出转到矩阵中的不同列。我尝试了类似的东西和几个类似的“版本”,但没有运气。

for (i in 1:3)(
r <- matrix()
r[re,i] <- re <- FUN(matrix[,i], v2, v3))

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

r <- matrix(ncol=3, nrow=10)
for (i in 1:3) {
  r[,i] <- FUN(matrix[,i], v2, v3)
}

在循环外声明你的矩阵,每次循环迭代只填充一列。

(这假设FUN是正确的;即使它是正确的,也有更好的方法来完成它的工作。还有其他方法可以做你想做的事情而不是循环。)