R 如何矢量化`[`

R 如何矢量化`[`,r,vectorization,R,Vectorization,我在使用Vectorize时遇到问题,错误如下所示。从帮助(“[”)中,似乎[/code>有名为x、I和j的参数,但当我将它们用作Vectorize.args时,它们似乎不起作用。我可以这样做吗 ## Some data dat <- data.frame(a=1:10, b=11:20, c=21:30) ## Vectorize with mapply, seems to work f <- function(i, j, dat) list(dat[i, j]) mapply(

我在使用
Vectorize
时遇到问题,错误如下所示。从
帮助(“[”
)中,似乎
[/code>有名为
x
I
j
的参数,但当我将它们用作
Vectorize.args
时,它们似乎不起作用。我可以这样做吗

## Some data
dat <- data.frame(a=1:10, b=11:20, c=21:30)

## Vectorize with mapply, seems to work
f <- function(i, j, dat) list(dat[i, j])
mapply(f, list(1:2, 3:4), list(1:2, 2:3), MoreArgs = list(dat=dat))
# [[1]]
#   a  b
# 1 1 11
# 2 2 12
# 
# [[2]]
#    b  c
# 3 13 23
# 4 14 24

## Now using Vectorize, apply to data
Vectorize(`[`, c("i", "j"))(x=dat, i=list(1:2, 2:3), j=list(1:2, 2:3))
而且,如果我这样做,也没关系

Vectorize(`[.data.frame`, c("i", "j"))(dat, list(1:2, 2:3), list(1:2, 2:3))
Vectorize()
被证明不能与基元函数一起使用。从
?矢量化

 ‘Vectorize’ cannot be used with primitive functions as they do not
 have a value for ‘formals’.
[
是R中的一个原语:

> `[`
.Primitive("[")
由于
[
已经矢量化了,我甚至不认为尝试这一点有什么意义。你的
`[`(x=dat,I=1:2,j=1:2)
的惯用用法是:

dat[1:2, 1:2]

> dat[1:2, 1:2]
  a  b
1 1 11
2 2 12
该索引也可以是(预先存在的)对象:

i <- 1:2
j <- 1:2
dat[i, j]

> dat[i, j]
  a  b
1 1 11
2 2 12

i
[
是一个基元,没有命名的形式参数,即
formals(“[”)NULL
@nongkrong primitve函数没有形式参数,因此无法获取它们。如果可以获取它们,
矢量化
将起作用。请参阅
i <- 1:2
j <- 1:2
dat[i, j]

> dat[i, j]
  a  b
1 1 11
2 2 12