是否存在相当于子集运算符“[]”的 R 函数,以便按索引进行切片?

Jul*_*ien 2 r vector slice

我知道这[]本身就是一个函数,但是是否有一个函数可以执行以下操作?

vect = c(1, 5, 4)

# Slicing by row index with []
vect[2]
# [1] 5

# Does this kind of function exist ? 
slicing_func(vect, 2)
# [1] 5

# And for dataframes ?
Run Code Online (Sandbox Code Playgroud)

jay*_*.sf 9

理解[]其实是一个函数”的深层含义\xe2\x80\x94

\n
vect[2]\n# [1] 5\n
Run Code Online (Sandbox Code Playgroud)\n

相当于:

\n
`[`(vect, 2)\n# [1] 5\n
Run Code Online (Sandbox Code Playgroud)\n

看来您已经使用过您正在寻找的功能。

\n

请注意,它也适用于数据框/矩阵。

\n
dat\n#   X1 X2 X3 X4\n# 1  1  4  7 10\n# 2  2  5  8 11\n# 3  3  6  9 12\n\n`[`(dat, 2, 3)\n# [1] 8\n\n`[`(dat, 2, 3, drop=F)  ## to get a data frame back\n#   X3\n# 2  3\n
Run Code Online (Sandbox Code Playgroud)\n
\n

数据:

\n
vect <- c(1, 5, 4)\ndat <- data.frame(matrix(1:12, 3, 4))\n
Run Code Online (Sandbox Code Playgroud)\n

  • @Julien这是一个品味问题,你可以做 `foo &lt;- \`[\`; foo(vect, 2)` 或使用一个奇特的包,将这个技巧作为巧妙的函数来推销。 (4认同)
  • @Julien所以你的问题实际上是:“是否还有另一个函数与‘[’的功能相同,但调用方式不同?”? (2认同)

Moh*_*uky 7

您可以使用getElement函数

vect = c(1, 5, 4)

getElement(vect, 2)

#> 5

Run Code Online (Sandbox Code Playgroud)

或者你可以使用

vctrs::vec_slice(vect , 2)

#> 5
Run Code Online (Sandbox Code Playgroud)

它也适用于切片和数据帧。