1

我有一些数据,身高。

> print(height)
             V3          V4          V5          V6          V7          V8          V9         V10         V11         V12         V13         V14         V15 
      0.0000000  -3.1486232  39.1502937  -2.8437808 -24.7633269 -35.4022061 -36.2401943  46.4133021 -19.1868097   0.4067331  22.6768200 -38.8550971 -41.3161054 
            V16         V17         V18         V19         V20 
     33.0446273  41.4934899  19.9558741   3.3477473   0.3611974

然后我应用 turnpoints(),并使用 extract() 来获得看起来像逻辑向量的东西,指示最小值的位置。

tp = turnpoints(height)
pitpositions = extract(tp, peak = FALSE, pit = TRUE)
print(pitpositions) # [1] 0 1 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0

我希望这height[pitpositions]会给出最小值,并且height[!pitpositions]会给出非最小值的值。

后者按预期工作:

> height[!pitpositions]
         V3          V5          V6          V7          V8         V10         V12         V13         V14         V16         V17         V18         V19 
  0.0000000  39.1502937  -2.8437808 -24.7633269 -35.4022061  46.4133021   0.4067331  22.6768200 -38.8550971  33.0446273  41.4934899  19.9558741   3.3477473 
        V20 
  0.3611974

但前者没有,我不知道如何解释结果:

> height[pitpositions]
V3 V3 V3 V3 
 0  0  0  0 

所以我的问题是:

  1. 为什么会这样?
  2. 我怎样才能得到我正在寻找的结果(基本上与高度[!pitpositions]相反?

编辑:

要回答第 2 个问题,我可以使用height[tp$pits]. tp$pits 似乎具有与 相同的信息pitpositions,但是当我打印出来时,pitpositoins我得到了一系列TRUE FALSE,而当我打印出来时,tp$pits我得到了一系列0 1. 我会认为这些是等价的,因为0 == FALSE1 == TRUE

4

1 回答 1

1

我不认为extract是在做你想做的事。height[!pitpositions] 提供了你喜欢的东西是偶然的。

我会推荐一些更像是tp直接使用组件的东西。

Rgames> tp$peaks
 [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
[13] FALSE FALSE  TRUE FALSE FALSE FALSE
Rgames> tp$pits
 [1] FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE
[13]  TRUE FALSE FALSE FALSE FALSE FALSE
Rgames> height[tp$peaks]
[1] 39.15029 46.41330 22.67682 41.49349
Rgames> height[tp$pits]
[1]  -3.148623 -36.240194 -19.186810 -41.316105

编辑:似乎对象的默认方法extractturnpoints

Rgames> extract(tp)
 [1]  0 -1  1  0  0  0 -1  1 -1  0  1  0 -1  0  1  0  0  0

因此,与其提取其中的一个子集,您可能还想做类似的事情

height[extract(tp)== -1] 

对于坑,和

height[extract(tp)== 1]

为峰。我怀疑您extract发布的原始公式返回所有不等于 1(或不等于-1)的值,因此返回零,以及向量长度的变化。

于 2013-09-09T13:42:23.777 回答