【问题标题】:R: equivalent to Numpy's "dot dot dot" operator for slicingR:相当于 Numpy 用于切片的“点点点”运算符
【发布时间】:2017-11-19 12:33:18
【问题描述】:

在 Python 中,如果 a 是一个 Numpy 数组,我可以这样做:

a[..., 0]

获取最后一个维度的第一个元素,无论shape 还是a

例子:

a = np.array([1,2,3])
a[..., 0]
Out[128]: array(1)

a = np.array([[1,2,3],[4,5,6]])
a[..., 0]
Out[130]: array([1, 4])

a = np.array([[[1,2,3],[4,5,6]], [[7,8,9],[10,11,12]]])
a[..., 0]
Out[132]: 
array([[ 1,  4],
       [ 7, 10]])

在基础 R here 中找不到等效项。

有没有办法在(基础)R 中对任何数组执行此操作?在接收任何 nD 数组的泛型函数中确实很有帮助。

【问题讨论】:

  • 在 python 中是 ellipsis 对象。

标签: arrays r numpy


【解决方案1】:

我们可以自己写。这里a 必须是数组或对象,例如 as.array(obj) 是数组,i 是最后一维的可选索引,默认为 1。

last <- function(a, i = 1) {
  a <- as.array(a)
  ix <- lapply(dim(a), seq_len)
  ix[[length(ix)]] <- i
  do.call("[", c(list(a), ix))
}


# tests

a <- array(1:24, 2:4)
last(a)

m <- matrix(1:6, 2)
last(m)

last(1:3)

last(as.matrix(BOD))      # BOD is a builtin data.frame

【讨论】:

  • 爱它。谢谢。
  • 已修改,以便 i 现在可以选择为向量,例如last(a, 1:2)
猜你喜欢
  • 1970-01-01
  • 2019-02-16
  • 1970-01-01
  • 1970-01-01
  • 2016-11-24
  • 2012-04-23
  • 1970-01-01
  • 2021-07-14
  • 2023-03-27
相关资源
最近更新 更多