我有一个测试数据框 df:
testdf<-data.frame(x = seq(1,10), y= c(1, 1, 4, 3, 2, 6, 7, 4, 9, 10))
testdf
x y
1 1 1
2 2 1
3 3 4
4 4 3
5 5 2
6 6 6
7 7 7
8 8 4
9 9 9
10 10 10
我想编写一个函数,输入一行数,然后“跟随”y值,直到找到一个列x等于列y的行。
get_acc_x<-function(rownum){
if(testdf[rownum, 'x'] == testdf[rownum, 'y']){
return(rownum)
}else{
get_acc_x(testdf[rownum, 'y'])
}
}
因此,运行 get_acc_x(1) 返回 1,get_acc_x(9) 返回 9,get_acc_x(2) 返回 1,get_acc_x(5) 也返回 1,以此类推。
但是,如果我对数字 8 运行此函数,它将陷入无限循环,来回在 3 和 4 之间。如何最容易地检测出这种情况下的无限循环?我想跟踪过去的输入,以便在使用相同的输入超过一次时停止函数,但我不知道如何最好地跟踪输入。