R 如何将这些零值进行子集计算?

R 如何将这些零值进行子集计算?,r,R,我是R新手,我得到了一些向量,比如vec,在本例中,使用is.finite()函数应用log()后,可能更容易删除它们: > 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.60943

我是R新手,我得到了一些向量,比如
vec,在本例中,使用
is.finite()
函数应用
log()
后,可能更容易删除它们:

> 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
要执行所需操作,您可以始终识别哪些元素等于零(不等于零),并删除(选择)这些元素,如中所示

> 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

在这种情况下,使用
is.finite()
函数应用
log()
后,可能更容易删除它们:

> 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
要执行所需操作,您可以始终识别哪些元素等于零(不等于零),并删除(选择)这些元素,如中所示

> 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
v
v提供的“之前做”和“之后做”答案都将在值完全等于零的情况下完成工作。如果您怀疑您的数据有一些微小的值(例如1E-30),您需要决定是否希望删除这些值。如果您这样做,请使用与答案中相同的方法,但使用
lvec-1e20]
(任意选择巨大的负对数)或
log(v[v>1e-30])
提供的“在之前做”和“在之后做”答案将在值完全等于零的情况下完成工作。如果您怀疑您的数据有一些微小的值(例如1E-30),您需要决定是否希望删除这些值。如果是,请使用与答案中相同的方法,但使用
lvec-1e20]
(任意选择大负对数)或
log(v[v>1e-30])