2016-12-02 9 views
1

Надеется, простой вопрос:если длина выражения аргумента 0

Я получаю «аргумент имеет нулевую длину» для если заявление линии:

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

Где MixedDF большой матрицы и SwitchInd является матрицу нулей, которая должна заполняться индексами, указанными в выражении if. MixedDF$trial или MixedDF[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://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610) было бы неплохо. Это значительно облегчает вам помощь других. – Jaap

+0

, с помощью которого я получаю «аргумент», который «нелогичен». Я установил MixedDF $ trial в as.numeric, не уверен, что это важно. – bsils

ответ

2

Это дает индексы, где значение изменения

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

Спасибо работает, когда класс уместен и прост, также обнаружил, что это работает: which (MixedDF $ trial [-1]! = MixedDF $ trial [-length (MixedDF $ trial)]), но не смог заставить цикл for работать. – bsils

0

Убедитесь, что у вас нет значений NULL. Кроме того, вы не определяете случаи, когда инструкция if терпит неудачу. Добавьте условие «еще».

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

Другая проблема заключается в том, что вы не можете начать с 1 (когда i равно 1, i-1 равно 0).

+0

Да, я получил это от nrussel, я просто изменил for для перехода от 2: length (DF). – bsils