如何调节函数的一部分

时间:2018-03-08 17:42:36

标签: r function multidimensional-array

我已经将此函数稍后应用于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
}
}

任何小小的迹象都会受到欢迎。 提前谢谢。

2 个答案:

答案 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)
}

注意:请注意=(单等号)是一个等同于<-的赋值运算符。对于逻辑比较,您应该使用==(双等号)