我是 R 新手,我得到了一些向量,例如vec <- c(1,5,0,6,9,10,20,0,6)
,我想对log()
它们应用一个函数,但不希望-Inf
结果中剩余的值。如何通过子集原始向量中的值“0”来避免这种情况?
问问题
934 次
2 回答
4
在这种情况下,使用函数应用后可能更容易删除它们:log()
is.finite()
> vec <- c(1,5,0,6,9,10,20,0,6)
> lvec <- log(vec)
> is.finite(lvec)
[1] TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE
> lvec[is.finite(lvec)]
[1] 0.000000 1.609438 1.791759 2.197225 2.302585 2.995732
[7] 1.791759
请注意,有相反的功能is.infinite()
来识别Inf
和-Inf
> is.infinite(lvec)
[1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE
要执行您想要的操作,您始终可以识别哪些等于(不等于)零并删除(选择)这些元素,如
> log(vec[vec != 0]) # select *not* zero elements
[1] 0.000000 1.609438 1.791759 2.197225 2.302585 2.995732
[7] 1.791759
> log(vec[!vec == 0]) # don't select the zero elements
[1] 0.000000 1.609438 1.791759 2.197225 2.302585 2.995732
[7] 1.791759
于 2012-12-11T11:55:22.880 回答
2
v <- c( 1,5,0,6,9,10,20,0,6)
log(v[v!=0]) # log to all values but 0's
log(v[v>=1]) # log of all non-negative and non-zeroes values log(v[!v<=0])
log(pmax(v, 1)) # all 0's are set to be 1, then applying log
于 2012-12-11T11:57:17.597 回答