if语句的参数长度为0

问题描述:

希望一个简单的问题:if语句的参数长度为0

我得到一个“说法是长度为零的”为if语句行:

for (i in 1:(length(MixedDF))) { 
     if (MixedDF[i,1] - MixedDF[i-1,1] == 1) { 
     SwitchInd[i] = MixedDF$trial[i] 
    } 
} 

凡MixedDF是一个大的矩阵和SwitchInd是应该用if语句中标识的索引填充零矩阵。 MixedDF$trialMixedDF[i,1]是矩阵中的第一列。此列包含从51开始并到74的整数,其中有许多行具有相同的值。因此,例如MixedDF$trial <- c(51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53.....)。我想确定试验改变的指数,例如51到52,52到53等等。更一般地说,我想明白为什么if语句不起作用,这似乎很直接。

+1

当'i'是'1','MixedDF [I-1,1]'没有很好地形成。 – nrussell

+0

[可重现的例子](http://*.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610)会很好。这使得其他人更容易帮助你。 – Jaap

+0

使用我得到一个“论据”,'哪个'是不合逻辑的,我已经把MixedDF $ trial设置为as.numeric,不知道是否有问题 – bsils

这使指数在那里将数值改变

x <- c(51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53) 
which(diff(x)!= 0) + 1 

#[1] 6 15 
+1

谢谢当类是适当的,并且很简单时,它也可以工作:哪些(MixedDF $ trial [-1]!= MixedDF $ trial [-length(MixedDF $ trial)])但无法使for循环正常工作。 – bsils

请确保您没有NULL值。另外,您没有定义if语句失败的情况。添加'其他'条件。

if (MixedDF[i,1] - MixedDF[i-1,1] == 1) 
{ 
    SwitchInd[i] = MixedDF$trial[i] 
} 
else 
{ 
    SwitchInd[i] = SOME VALUE 
} 

另一个问题是你不能从1开始(当我是1,我-1是0)。

+0

是从nrussel那里得到的,我刚刚改变了从2:长度(DF)开始 – bsils