У меня есть дерево, изложенное в кадре данных, как:Функция игнорирование моего, если оператор условия
number conc knot neg pick
1 1 0 0 1
2 1 0 0 1
3 1 0 0 1
4 3 164 0 1
5 1 0 0 1
6 1 0 0 1
7 3 159 1 1
8 0 0 0 0
9 0 0 0 0
10 3 208 1 1
11 3 181 1 1
12 3 1 1 1
13 3 95 0 1
14 0 0 0 0
15 0 0 0 0
Я обход дерева с рекурсивной функцией:
printtree <- function(number,tree) {
if (!is.na(tree[number,5] != 0)) {
letssee<-c(tree[number,1],tree[number,2],tree[number,3],tree[number,4],tree[number,5])
print(letssee)
}
left <- tree[number,1]
if (!is.na(left)) printtree(tree[left,1]*2,tree)
right <- tree[number,1]
if (!is.na(right)) printtree(tree[right,1]*2+1,tree)
}
Моим, если условие должно быть опуская линии, когда столбец pick = 0, но он все еще печатает, и я не могу понять, почему.
Вот результат:
[1] 1 1 0 0 1
[1] 2 1 0 0 1
[1] 4 3 164 0 1
[1] 8 0 0 0 0
[1] 9 0 0 0 0
[1] 5 1 0 0 1
[1] 10 3 208 1 1
[1] 11 3 181 1 1
[1] 3 1 0 0 1
[1] 6 1 0 0 1
[1] 12 3 1 1 1
[1] 13 3 95 0 1
[1] 7 3 159 1 1
[1] 14 0 0 0 0
[1] 15 0 0 0 0
ли это игнорирование моего, если заявление из-за is.na()? Если у меня нет проверки is.na, я получаю сообщение об ошибке «Недопустимое значение, в котором требуется TRUE/FALSE», поэтому он должен быть там.
структуры данных дерева доступны в пакете data.tree и через Rcpp. Вы изобретаете это колесо в пределах рамки data.frame? – Frank
Я так не думаю - кадр данных упорядочен по-другому, чем то, что мне нужно. Поэтому я переупорядочиваю его таким образом, который полезен для моих целей. Я могу сохранить новую структуру в кадре данных и опустить эти строки, но это кажется неэффективным. Мне интересно, почему условие проигнорировано в выходе. – Jason
'! Is.na (tree [number, 5]! = 0)' никогда не будет 'FALSE', так как' pick' никогда не 'FALSE' .. Почему вы ищете' NA 'там? Замените на 'tree [number, 5]! = 0'. – Axeman