我在数据框中概述了一棵树:
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)
}
我的if条件应该在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()而忽略了我的if语句吗?如果我没有进行is.na检查,我会收到错误,因为缺少值,其中需要TRUE / FALSE&#34;所以必须在那里。
答案 0 :(得分:0)
如果树[number,5]恰好等于零,那么内部测试
tree[number, 5] !=0
将返回FALSE。 FALSE不是NA值,因此!is.na(FALSE)将始终返回TRUE。因此,如果tree [number,5]为零,那么你编写的if语句将始终返回TRUE。
也许试试:
if (!is.na(X) & X !=0) {...}