rray_subset()
extracts dimensions from an array by index. It powers [
for rray objects. Notably, it never drops dimensions, and ignores
trailing commas.
rray_subset(x, ...) <- value # S3 method for vctrs_rray [(x, ...) <- value rray_subset_assign(x, ..., value) rray_subset(x, ...) # S3 method for vctrs_rray [(x, ..., drop = FALSE)
x | A vector, matrix, array, or rray. |
---|---|
... | A specification of indices to extract.
|
value | The value to assign to the location specified by |
drop | Ignored, but preserved for better error messages with code that might have used arrays before. |
x
subset by the specification defined in the ...
.
The assignment variants return x
modified by having the elements of
value
inserted into the positions defined by ...
.
rray_subset()
and its assignment variant can also be used with base R
matrices and arrays to get rray subsetting behavior with them.
rray_subset()
never drops dimensions.
rray_subset()
ignores trailing commas. This has the nice property of
making x[1] == x[1,]
.
rray_subset()<-
casts value
to x
, rather than
casting x
to value
.
Other rray subsetters: rray_extract<-
,
rray_slice<-
, rray_yank<-
#> <rray<int>[,2,2][1]> #> , , 1 #> #> [,1] [,2] #> [1,] 1 3 #> #> , , 2 #> #> [,1] [,2] #> [1,] 5 7 #>x[1]#> <rray<int>[,2,2][1]> #> , , 1 #> #> [,1] [,2] #> [1,] 1 3 #> #> , , 2 #> #> [,1] [,2] #> [1,] 5 7 #># Trailing dots are ignored, so these are identical x[1]#> <rray<int>[,2,2][1]> #> , , 1 #> #> [,1] [,2] #> [1,] 1 3 #> #> , , 2 #> #> [,1] [,2] #> [1,] 5 7 #>x[1,]#> <rray<int>[,2,2][1]> #> , , 1 #> #> [,1] [,2] #> [1,] 1 3 #> #> , , 2 #> #> [,1] [,2] #> [1,] 5 7 #># Missing arguments are treated as selecting the # entire dimension, consistent with base R. # This selects all of the rows, and the first column. x[,1]#> <rray<int>[,1,2][2]> #> , , 1 #> #> [,1] #> [1,] 1 #> [2,] 2 #> #> , , 2 #> #> [,1] #> [1,] 5 #> [2,] 6 #># Notice that you can't actually do the above with base # R. It requires you to fully specify the dimensions of `x`. # This would throw an error. x_arr <- as_array(x) try(x_arr[,1])#> Error in x_arr[, 1] : incorrect number of dimensions# To get the same behavior, you have to do: x_arr[, 1, , drop = FALSE]#> , , 1 #> #> [,1] #> [1,] 1 #> [2,] 2 #> #> , , 2 #> #> [,1] #> [1,] 5 #> [2,] 6 #># Note that you can use base R arrays with `rray_subset()` rray_subset(x_arr, , 1)#> , , 1 #> #> [,1] #> [1,] 1 #> [2,] 2 #> #> , , 2 #> #> [,1] #> [1,] 5 #> [2,] 6 #># For higher dimensional objects, `pad()` can be # useful for automatically adding commas. The # following are equivalent: x[pad(), 1]#> <rray<int>[,2,1][2]> #> , , 1 #> #> [,1] [,2] #> [1,] 1 3 #> [2,] 2 4 #>x[, , 1]#> <rray<int>[,2,1][2]> #> , , 1 #> #> [,1] [,2] #> [1,] 1 3 #> [2,] 2 4 #># You can assign to index locations with # `x[...] <- value` # This assigns 99 to the entire first row x[1] <- 99 x#> <rray<int>[,2,2][2]> #> , , 1 #> #> [,1] [,2] #> [1,] 99 99 #> [2,] 2 4 #> #> , , 2 #> #> [,1] [,2] #> [1,] 99 99 #> [2,] 6 8 #># First row in the first # element of the 3rd dimension x[1, , 1] <- 100 x#> <rray<int>[,2,2][2]> #> , , 1 #> #> [,1] [,2] #> [1,] 100 100 #> [2,] 2 4 #> #> , , 2 #> #> [,1] [,2] #> [1,] 99 99 #> [2,] 6 8 #># Note that `value` is broadcast to the shape # of `x[...]`. So this... x[,1] <- matrix(5) # ...becomes the same as x[,1] <- array(5, c(2, 1, 2)) # You can also use `rray_subset<-()` directly to # use these semantics with base R rray_subset(x_arr, , 1) <- matrix(5) x_arr#> , , 1 #> #> [,1] [,2] #> [1,] 5 3 #> [2,] 5 4 #> #> , , 2 #> #> [,1] [,2] #> [1,] 5 7 #> [2,] 5 8 #>