我已经将此函数稍后应用于3D数组f3 <- function(x) {-sum((x / sum(x)) * log2(x / sum(x)))}
,并且我正在尝试应用条件,如果函数的第二部分是-Inf
(即{{ 1}}),然后这部分将是log2(x/sum(x)=-Inf
(即0
。我正在尝试在函数中嵌入一个if语句(见下文),但现在不能工作。
log2(x/sum(x))=0)
我在1000个24x24矩阵(a)的3D数组上使用此函数来尝试这个I,m只使用数组的第一个矩阵a [,, 1]
f3 <- function(x) {
-sum((x / sum(x)) * log2(x / sum(x)))
if((log2(x/sum(x)))==-Inf) {
log2(x/sum(x))==0
}
}
任何小小的迹象都会受到欢迎。 提前谢谢。
答案 0 :(得分:0)
我相信你正在寻找的东西可以这样完成:
f3 <- function(x) {
if(log2(x/sum(x)) == -Inf) {
result <- 0
} else {
result <- -sum((x / sum(x)) * log2(x / sum(x)))
}
return(result)
}
答案 1 :(得分:0)
也许这对你有用。只是微小的变化:
f3 <- function(x) {
denom <- log2(x / sum(x))
if(denom==-Inf|is.nan(denom)) { denom <- 0}
-sum((x / sum(x)) * denom)
}
注意:请注意=
(单等号)是一个等同于<-
的赋值运算符。对于逻辑比较,您应该使用==
(双等号)