% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/attack.R
\name{attack}
\alias{attack}
\title{Attacking primary suppressed cells}
\usage{
attack(
  object,
  to_attack = NULL,
  verbose = TRUE,
  threshold = 1e-08,
  n_workers = 1,
  ...
)
}
\arguments{
\item{object}{an object of class `sdcProblem`}

\item{to_attack}{if `NULL` all current primary suppressed cells are attacked;
otherwise either an integerish (indices) or character-vector (str-ids) of
the cells that should be attacked.}

\item{verbose}{a logical scalar determining if additional output should be
displayed}

\item{threshold}{a numeric scalar defining the tolerance for the protection
check. A cell is considered protected if the absolute difference between the computed
upper and lower bound is strictly greater than this threshold. Defaults to `1e-8`.}

\item{n_workers}{a scalar positive integer specifying the number of parallel
workers to use for calculation}

\item{...}{placeholder for possible additional input, currently unused;}
}
\value{
a `data.frame` with the following columns:
- `sdc`: the original sdc-status code
- `freq`: the original value of the cell
- `id`: index of primary suppressed cells
- `low`: computed lower bound of the attacker's problem
- `up`: computed upper bound of the attacker's problem
- `protected`: logical, TRUE if the absolute difference between `up` and `low`
exceeds the defined `threshold`
}
\description{
Function [attack()] is used to compute lower and upper bounds for a given
sdcProblem instance. For all calculations the current suppression pattern
is used when calculating solutions of the attacker's problem.
}
\examples{
\dontrun{
dims <- list(
  v1 = sdcHierarchies::hier_create("tot", letters[1:4]),
  v2 = sdcHierarchies::hier_create("tot", letters[5:8])
)

N <- 150
df <- data.frame(
  v1 = sample(letters[1:4], N, replace = TRUE),
  v2 = sample(letters[5:8], N, replace = TRUE)
)

sdc <- makeProblem(data = df, dimList = dims)

# set primary suppressions
specs <- data.frame(
  v1 = c("a", "b", "a"),
  v2 = c("e", "e", "f")
)
sdc <- change_cellstatus(sdc, specs = specs, rule = "u")

# attack all primary sensitive cells with a custom threshold
attack(sdc, to_attack = NULL, threshold = 1e-6)

# protect the table and attack again
sdc <- protectTable(sdc, method = "SIMPLEHEURISTIC")
attack(sdc, to_attack = NULL)

# attack only selected cells
attack(sdc, to_attack = c(7, 12))

# Parallel processing (future.apply needs to be available)
attack(sdc, n_workers = 4)
}
}
\author{
Bernhard Meindl \email{bernhard.meindl@statistik.gv.at}
}
