R未正确识别等式
我试图根据哪一行的值最高来对矩阵进行分类。我的代码工作正常,除非第一行和第三行的值相同,否则输出结果是第三行的值大于第一行的值。 例如,当我使用以下矩阵时:R未正确识别等式,r,R,我试图根据哪一行的值最高来对矩阵进行分类。我的代码工作正常,除非第一行和第三行的值相同,否则输出结果是第三行的值大于第一行的值。 例如,当我使用以下矩阵时: , , 1 [,1] [,2] [,3] [1,] 0.5+0i 0.5+0i 0.5+0i [2,] 0.0+0i 0.0+0i 0.0+0i [3,] 0.5+0i 0.5+0i 0.5+0i 以及以下代码位: null <- 0 neg
, , 1
[,1] [,2] [,3]
[1,] 0.5+0i 0.5+0i 0.5+0i
[2,] 0.0+0i 0.0+0i 0.0+0i
[3,] 0.5+0i 0.5+0i 0.5+0i
以及以下代码位:
null <- 0
neg <- 0
pos <- 0
equal <- 0
for(i in 1){
if(Re(pie.ch[1,1,i])>Re(pie.ch[2,1,i]) &&
Re(pie.ch[1,1,i])>Re(pie.ch[3,1,i])){
neg<-neg+1
}
if(Re(pie.ch[3,1,i])>Re(pie.ch[1,1,i]) &&
Re(pie.ch[3,1,i])>Re(pie.ch[2,1,i])){
pos<-pos+1
}
if(Re(pie.ch[2,1,i])>Re(pie.ch[1,1,i]) &&
Re(pie.ch[2,1,i])>Re(pie.ch[3,1,i])){
null<-null+1
}
if((Re(pie.ch[1,1,i])==Re(pie.ch[2,1,i]) &&
Re(pie.ch[1,1,i])>Re(pie.ch[3,1,i]))||
(Re(pie.ch[1,1,i])==Re(pie.ch[3,1,i])&&
Re(pie.ch[1,1,i])>Re(pie.ch[2,1,i])||
(Re(pie.ch[2,1,i])==Re(pie.ch[3,1,1])&&
Re(pie.ch[3,1,i])>Re(pie.ch[1,1,i]))||
Re(pie.ch[1,1,i])==Re(pie.ch[2,1,i]) &&
Re(pie.ch[2,1,i])==Re(pie.ch[3,1,i]))){
equal<-equal+1
}
}
null
neg
pos
equal
但是,如果这三个值都相同,那么代码就可以正常工作。我尝试将所有值都设置为0,为Equal设置1,为Pos设置0
你知道为什么会发生这种错误吗?多谢各位 如果没有对象的dput,很难说您的问题可能是什么,但以下是当平等的逻辑测试无法满足我的期望时,我通常会寻找的
(x <- 0.5+0i + 1e-8)
# [1] 0.5+0i
Re(x) == 0.5
# [1] FALSE
但事实上,你的问题是不可复制的。使用表示的数据生成数组并运行代码,执行后pos为0,equal为1
pos <- 0
equal <- 0
pie.ch <- array(0, dim = c(3, 3, 3))
pie.ch[,,1] <- matrix(rep(c(0.5+0i, 0+0i, 0.5+0i), 3), 3)
pie.ch
# , , 1
# [,1] [,2] [,3]
# [1,] 0.5+0i 0.5+0i 0.5+0i
# [2,] 0.0+0i 0.0+0i 0.0+0i
# [3,] 0.5+0i 0.5+0i 0.5+0i
...
i <- 1
if(Re(pie.ch[3,1,i])>Re(pie.ch[1,1,i])&&Re(pie.ch[3,1,i])>Re(pie.ch[2,1,i])){pos<-pos+1}
if((Re(pie.ch[1,1,i])==Re(pie.ch[2,1,i])&&Re(pie.ch[1,1,i])>Re(pie.ch[3,1,i]))||(Re(pie.ch[1,1,i])==Re(pie.ch[3,1,i])&&Re(pie.ch[1,1,i])>Re(pie.ch[2,1,i])||(Re(pie.ch[2,1,i])==Re(pie.ch[3,1,1])&&Re(pie.ch[3,1,i])>Re(pie.ch[1,1,i]))||Re(pie.ch[1,1,i])==Re(pie.ch[2,1,i])&&Re(pie.ch[2,1,i])==Re(pie.ch[3,1,i]))){equal<-equal+1}
pos
# [1] 0
equal
# [1] 1
如果我理解正确,您也可以根据位置匹配这些值?所以如果第一列的值是max,你会认为它是负数,第三列的值是正数,依此类推?Zdravo.:我不确定我是否完全理解你的意思。基本上,这些矩阵表示马尔可夫链的平稳状态,因此第一行的值是人口负增长率的概率,第三行是正增长率,中间一行是0。Živjo:formatpie.ch[1,1,1],digits=16是什么?formatpie.ch[3,1,1],digits=16如何?请在代码中使用换行符、空格和更清晰的格式以使其可读。然后您必须给我们一种创建数组的方法。你能用dputpie.ch的输出编辑这个问题吗?或者如果问题太大,有一个子集可以重现这个问题吗?
(x <- 0.5+0i + .Machine$double.eps)
format(x, digits = 16)
# [1] "0.5000000000000002+0i"
pos <- 0
equal <- 0
pie.ch <- array(0, dim = c(3, 3, 3))
pie.ch[,,1] <- matrix(rep(c(0.5+0i, 0+0i, 0.5+0i), 3), 3)
pie.ch
# , , 1
# [,1] [,2] [,3]
# [1,] 0.5+0i 0.5+0i 0.5+0i
# [2,] 0.0+0i 0.0+0i 0.0+0i
# [3,] 0.5+0i 0.5+0i 0.5+0i
...
i <- 1
if(Re(pie.ch[3,1,i])>Re(pie.ch[1,1,i])&&Re(pie.ch[3,1,i])>Re(pie.ch[2,1,i])){pos<-pos+1}
if((Re(pie.ch[1,1,i])==Re(pie.ch[2,1,i])&&Re(pie.ch[1,1,i])>Re(pie.ch[3,1,i]))||(Re(pie.ch[1,1,i])==Re(pie.ch[3,1,i])&&Re(pie.ch[1,1,i])>Re(pie.ch[2,1,i])||(Re(pie.ch[2,1,i])==Re(pie.ch[3,1,1])&&Re(pie.ch[3,1,i])>Re(pie.ch[1,1,i]))||Re(pie.ch[1,1,i])==Re(pie.ch[2,1,i])&&Re(pie.ch[2,1,i])==Re(pie.ch[3,1,i]))){equal<-equal+1}
pos
# [1] 0
equal
# [1] 1