我是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很新,如果我的所有问题看起来都很愚蠢或不清楚,那就很抱歉。)
答案 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)
}
再次感谢你。