循环中的循环? R

时间:2015-10-25 18:10:35

标签: r loops

我是R的新手,我正在努力了解R中的循环是如何工作的。但是当我们有两个(或更多)时,我无法弄清楚如何让它们工作。

以下是代码:

 for (i in 1:(length(b)-1))
{
  for (j in 1:(length(a))
  {
    if ((a[j] >= b[i]) && (a[j] <b[i+1]))
    {
      1
    }
    else
    {
      0
    }
  }
}

a和b是两个向量。

所以(如果代码不清楚 - 当然是这种情况)我想要的是i = 1的条件测试然后经过所有j。然后测试i = 2并遍历所有j。等等。当条件合适时,返回1,否则为0.

我想要的只是一个矩阵/向量为0和1的输出。条件得到尊重时为1,否则为0。关于输入,“a”可以是(0,0.01,0.02,...,0.99),“b”可以是(0,0.1,0.2,...,1)。如果你找到/知道没有循环的方法,那也会很棒。

感谢您的帮助。对不起,如果已经问过这个问题。我对此很新。

编辑: @alexis_laz我没有考虑预先分配矩阵。这可以解决问题。非常感谢。但是,当我尝试这个功能时:

test <- function(a,b) 
{ 
  mat <- matrix(,length(a), (length(b)-1))
  for (i in 1:(length(b)-1))
  {
    for (j in 1:length(a))
    {
      if ((a[j] >= b[i]) && (a[j] <b[i+1])) 
      {
      mat[j,i] = 1
      }
      else 
      {
      mat[j,i] = 0
      }
    }
  }
}

Litteraly没有任何反应(没有错误,矩阵没有填写,等等)。我尝试了2个向量(前面定义的相同)。这个功能有问题吗?我不明白的东西? (我对R很新,如果我的所有问题看起来都很愚蠢或不清楚,那就很抱歉。)

1 个答案:

答案 0 :(得分:2)

谢谢你们。我发现了怎么做。简而言之:我需要预先分配一个矩阵,然后在函数末尾返回它。

test <- function(a,b) 
{ 
  mat <- matrix(,length(a), (length(b)-1))
  for (i in 1:(length(b)-1))
  {
    for (j in 1:length(a))
    {
      if ((a[j] >= b[i]) && (a[j] <b[i+1])) 
      {
      mat[j,i] = 1
      }
      else 
      {
      mat[j,i] = 0
      }
    }
  }
  return(mat)
}

再次感谢你。