Skip to contents

S3 Methods to return an object without the specified subset.

Usage

i_wo(x, ...)

i2_wo(x, ...)

ss_wo(x, ...)

ss2_wo(x, ...)

# Default S3 method
i_wo(x, i = NULL, ..., chkdup = getOption("squarebrackets.chkdup", FALSE))

# Default S3 method
ss_wo(
  x,
  s = NULL,
  d = 1:ndim(x),
  ...,
  chkdup = getOption("squarebrackets.chkdup", FALSE)
)

# Default S3 method
i2_wo(
  x,
  i = NULL,
  red = FALSE,
  ...,
  chkdup = getOption("squarebrackets.chkdup", FALSE)
)

# Default S3 method
ss2_wo(
  x,
  s = NULL,
  d = 1:ndim(x),
  red = FALSE,
  ...,
  chkdup = getOption("squarebrackets.chkdup", FALSE)
)

# S3 method for class 'data.frame'
ss2_wo(
  x,
  s = NULL,
  d = 1:2,
  obs = NULL,
  vars = NULL,
  ...,
  chkdup = getOption("squarebrackets.chkdup", FALSE)
)

Arguments

x

see squarebrackets_supported_structures.

...

see squarebrackets_method_dispatch.

i, s, d, obs, vars

See squarebrackets_indx_args.
An empty index selection results in nothing being removed, and the entire object is returned.

chkdup

see squarebrackets_options.
[for performance: set to FALSE]

red

Boolean, for recursive objects only, indicating if the result should be reduced.
If red = TRUE, selecting a single element will give the simplified result, like using [[]].
If red = FALSE, a list is always returned regardless of the number of elements.

Value

A copy of the sub-setted object.

Examples


# atomic objects ====

obj <- matrix(1:16, ncol = 4)
colnames(obj) <- c("a", "b", "c", "a")
print(obj)
#>      a b  c  a
#> [1,] 1 5  9 13
#> [2,] 2 6 10 14
#> [3,] 3 7 11 15
#> [4,] 4 8 12 16
ss_wo(obj, n(1:3), 1:ndim(obj))
#>       a
#> [1,] 16
# above is equivalent to  obj[-1:-3, -1:-3, drop = FALSE]
i_wo(obj, i = \(x) x > 5)
#> [1] 1 2 3 4 5
# above is equivalent to  obj[!obj > 5]
ss_wo(obj, n("a"), 2L)
#>      b  c
#> [1,] 5  9
#> [2,] 6 10
#> [3,] 7 11
#> [4,] 8 12
# above is equivalent to  obj[, which(!colnames(obj) %in% "a")]

obj <- array(1:64, c(4,4,3))
print(obj)
#> , , 1
#> 
#>      [,1] [,2] [,3] [,4]
#> [1,]    1    5    9   13
#> [2,]    2    6   10   14
#> [3,]    3    7   11   15
#> [4,]    4    8   12   16
#> 
#> , , 2
#> 
#>      [,1] [,2] [,3] [,4]
#> [1,]   17   21   25   29
#> [2,]   18   22   26   30
#> [3,]   19   23   27   31
#> [4,]   20   24   28   32
#> 
#> , , 3
#> 
#>      [,1] [,2] [,3] [,4]
#> [1,]   33   37   41   45
#> [2,]   34   38   42   46
#> [3,]   35   39   43   47
#> [4,]   36   40   44   48
#> 
ss_wo(obj, n(1, c(1, 3)), c(1, 3))
#> , , 1
#> 
#>      [,1] [,2] [,3] [,4]
#> [1,]   18   22   26   30
#> [2,]   19   23   27   31
#> [3,]   20   24   28   32
#> 
# above is equivalent to obj[-1, , c(-1, -3), drop = FALSE]
i_wo(obj, i = \(x)x > 5)
#> [1] 1 2 3 4 5
# above is equivalent to obj[!obj > 5]



#############################################################################


# lists ====

obj <- list(a = 1:10, b = letters[1:11], c = 11:20)
print(obj)
#> $a
#>  [1]  1  2  3  4  5  6  7  8  9 10
#> 
#> $b
#>  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k"
#> 
#> $c
#>  [1] 11 12 13 14 15 16 17 18 19 20
#> 
i2_wo(obj, "a")
#> $b
#>  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k"
#> 
#> $c
#>  [1] 11 12 13 14 15 16 17 18 19 20
#> 
# above is equivalent to obj[which(!names(obj) %in% "a")]
i2_wo(obj, 1) # obj[-1]
#> $b
#>  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k"
#> 
#> $c
#>  [1] 11 12 13 14 15 16 17 18 19 20
#> 
i2_wo(obj, 1:2)
#> $c
#>  [1] 11 12 13 14 15 16 17 18 19 20
#> 
# above is equivalent to obj[seq_len(length(obj))[-1:-2]]
i2_wo(obj, is.numeric, red = TRUE)
#>  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k"
# above is equivalent to obj[[!sapply(obj, is.numeric)]] IF this returns a single element
obj <- list(a = 1:10, b = letters[1:11], c = letters)
i2_wo(obj, is.numeric)
#> $b
#>  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k"
#> 
#> $c
#>  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
#> [20] "t" "u" "v" "w" "x" "y" "z"
#> 
# above is equivalent to obj[!sapply(obj, is.numeric)] # this time singular brackets?
# for recusive indexing, see lst_rec()


obj <- rbind(
  lapply(1:4, \(x)sample(c(TRUE, FALSE, NA))),
  lapply(1:4, \(x)sample(1:10)),
  lapply(1:4, \(x)rnorm(10)),
  lapply(1:4, \(x)sample(letters))
)
colnames(obj) <- c("a", "b", "c", "a")
print(obj)
#>      a            b            c            a           
#> [1,] logical,3    logical,3    logical,3    logical,3   
#> [2,] integer,10   integer,10   integer,10   integer,10  
#> [3,] numeric,10   numeric,10   numeric,10   numeric,10  
#> [4,] character,26 character,26 character,26 character,26
ss2_wo(obj, n(1:3), 1:ndim(obj))
#>      a           
#> [1,] character,26
# above is equivalent to obj[1:3, 1:3, drop = FALSE]
i2_wo(obj, i = is.numeric)
#> [[1]]
#> [1]  TRUE    NA FALSE
#> 
#> [[2]]
#>  [1] "g" "l" "t" "h" "b" "f" "z" "u" "n" "k" "e" "v" "m" "q" "w" "o" "j" "s" "x"
#> [20] "i" "d" "y" "p" "a" "r" "c"
#> 
#> [[3]]
#> [1]  TRUE FALSE    NA
#> 
#> [[4]]
#>  [1] "e" "w" "d" "m" "z" "t" "u" "y" "f" "o" "s" "g" "n" "l" "i" "b" "a" "x" "q"
#> [20] "r" "j" "h" "c" "v" "k" "p"
#> 
#> [[5]]
#> [1]  TRUE FALSE    NA
#> 
#> [[6]]
#>  [1] "e" "i" "g" "w" "s" "j" "m" "u" "k" "d" "p" "x" "l" "t" "n" "h" "q" "o" "c"
#> [20] "a" "b" "y" "r" "z" "f" "v"
#> 
#> [[7]]
#> [1]    NA FALSE  TRUE
#> 
#> [[8]]
#>  [1] "w" "h" "s" "d" "q" "a" "j" "k" "o" "p" "u" "b" "c" "y" "m" "z" "i" "t" "x"
#> [20] "e" "n" "f" "r" "g" "v" "l"
#> 
# above is equivalent to obj[sapply(obj, is.numeric)]
ss2_wo(obj, n(c("a", "a")), 2L)
#>      b            c           
#> [1,] logical,3    logical,3   
#> [2,] integer,10   integer,10  
#> [3,] numeric,10   numeric,10  
#> [4,] character,26 character,26
# above is equivalent to obj[, lapply(c("a", "a"), \(i) which(colnames(obj) == i)) |> unlist()]

obj <- array(as.list(1:64), c(4,4,3))
print(obj)
#> , , 1
#> 
#>      [,1] [,2] [,3] [,4]
#> [1,] 1    5    9    13  
#> [2,] 2    6    10   14  
#> [3,] 3    7    11   15  
#> [4,] 4    8    12   16  
#> 
#> , , 2
#> 
#>      [,1] [,2] [,3] [,4]
#> [1,] 17   21   25   29  
#> [2,] 18   22   26   30  
#> [3,] 19   23   27   31  
#> [4,] 20   24   28   32  
#> 
#> , , 3
#> 
#>      [,1] [,2] [,3] [,4]
#> [1,] 33   37   41   45  
#> [2,] 34   38   42   46  
#> [3,] 35   39   43   47  
#> [4,] 36   40   44   48  
#> 
ss2_wo(obj, n(1, c(1, 3)), c(1, 3))
#> , , 1
#> 
#>      [,1] [,2] [,3] [,4]
#> [1,] 18   22   26   30  
#> [2,] 19   23   27   31  
#> [3,] 20   24   28   32  
#> 
# above is equivalent to obj[-1, , c(-1, -3), drop = FALSE]
i2_wo(obj, i = \(x)x>5)
#> [[1]]
#> [1] 1
#> 
#> [[2]]
#> [1] 2
#> 
#> [[3]]
#> [1] 3
#> 
#> [[4]]
#> [1] 4
#> 
#> [[5]]
#> [1] 5
#> 
# above is equivalent to obj[!sapply(obj, \(x) x > 5)]



#############################################################################

# data.frame-like objects ====

obj <- data.frame(a = 1:10, b = letters[1:10], c = 11:20, d = factor(letters[1:10]))
print(obj)
#>     a b  c d
#> 1   1 a 11 a
#> 2   2 b 12 b
#> 3   3 c 13 c
#> 4   4 d 14 d
#> 5   5 e 15 e
#> 6   6 f 16 f
#> 7   7 g 17 g
#> 8   8 h 18 h
#> 9   9 i 19 i
#> 10 10 j 20 j
ss2_wo(obj, n(1:3))
#>   d
#> 1 d
#> 2 e
#> 3 f
#> 4 g
#> 5 h
#> 6 i
#> 7 j
# above is equivalent to obj[-1:-3, -1:-3, drop = FALSE]
ss2_wo(obj, obs = ~ (a > 5) & (c < 19), vars = is.numeric)
#>   b d
#> 1 a a
#> 2 b b
#> 3 c c
#> 4 d d
#> 5 e e
#> 6 i i
#> 7 j j