规范化函数返回NaN

时间:2015-09-18 20:27:41

标签: r

我正在尝试使用lapply apply将此函数应用于向量,但它只返回NaN。

 Select tm.LocID  = (select  LocID from tblLoc tl
                     where tl.LocID = tm.LodID )
 from tblMain tm

当我使用normalize(c(1,5,10))时它工作正常。

1 个答案:

答案 0 :(得分:2)

如果您使用normalize(x),则会获得正确的结果。在这种情况下,函数接收具有若干个数作为参数的向量,从中可以确定最小值和最大值以计算归一化值。

相反,使用lapply(x,normalize),您可以有效地执行一个循环,将函数normalize()应用于向量x的每个元素。由于每次迭代只将一个数字(向量元素)传递给函数,因此min(x)等于max(x)。因此,分母max(object)-min(object)在每次迭代时为零,每次调用函数时除以零都会产生NaN

修改

lapply的调用在x是矢量列表的情况下非常有用。然后,可以立即获得列表x中每个向量的归​​一化版本(根据OP中定义的函数)。

以下是一个例子:

x <- list()
x[[1]] <- c(1,3,9)
x[[2]] <- c(2,4,4,8)
x[[3]] <- c(1,2,3,5,8,13)
> lapply(x,normalize)
#[[1]]
#[1] 0.00 0.25 1.00
#
#[[2]]
#[1] 0.0000000 0.3333333 0.3333333 1.0000000
#
#[[3]]
#[1] 0.00000000 0.08333333 0.16666667 0.33333333 0.58333333 1.00000000