【问题标题】:How does this odds/even extraction work in R language?这种赔率/偶数提取如何在 R 语言中工作?
【发布时间】:2021-01-11 08:42:16
【问题描述】:
> a <- sample(c(1:10), 20, replace = TRUE)
> a
 [1]  6  3  6  2  6  9  3  9  9  8  2 10  7  9  1  5  3 10  5  5
> a[c(TRUE,FALSE)]
 [1] 6 6 6 3 9 2 7 1 3 5

为什么 a[c(TRUE,FALSE)] 给了我数组的奇数元素? c(TRUE, FALSE) 的长度为 2。在我看来,这应该给我一个索引 1,即 TRUE。

为什么会这样?

【问题讨论】:

  • 向量c(TRUE,FALSE)被循环到a的长度,从而成为TRUE和FALSE交替的向量。
  • 为了说明,请尝试:cbind.data.frame(x = 1:10, odd = c(TRUE, FALSE), even = c(FALSE, TRUE))
  • 好的,@zx8754,你的解释很好地澄清了我的问题。谢谢。

标签: r algorithm


【解决方案1】:

逻辑子集被回收以匹配向量的长度(数字子集不被回收)。

来自help("[")

参数

i, j, …

...

仅适用于[-indexing:ij 可以是逻辑向量, 指示要选择的元素/切片。如果这样的向量被回收 需要匹配相应的范围。 i,j,也可以 负整数,表示要从 选择。

当通过[ 索引数组时,单个参数i 可以是一个矩阵 与x 的维度一样多的列;结果是 向量,其元素对应于每行中的索引集 i.


为了说明,请尝试:

cbind.data.frame(x = 1:10, odd = c(TRUE, FALSE), even = c(FALSE, TRUE))
#     x   odd  even
# 1   1  TRUE FALSE
# 2   2 FALSE  TRUE
# 3   3  TRUE FALSE
# 4   4 FALSE  TRUE
# 5   5  TRUE FALSE
# 6   6 FALSE  TRUE
# 7   7  TRUE FALSE
# 8   8 FALSE  TRUE
# 9   9  TRUE FALSE
# 10 10 FALSE  TRUE

【讨论】:

    【解决方案2】:

    a[TRUE] 提供所有元素,a[FALSE] 不提供。对于a[c(TRUE,FALSE],它将包装length(c(TRUE,FALSE)),即2 到length(a),即20,例如,它会像TRUE, FALSE, TRUE, ....,那么它只会给你odds 索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-27
      • 2018-01-19
      • 2023-02-02
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      相关资源
      最近更新 更多