Learn R Programming

poseticDataAnalysis (version 1.0.0)

ExactEvaluation: Computing function mean values on linear extensions

Description

ExactEvaluation computes the mean values of the input functions (defined on linear orders) over the set of linear extensions of the input poset. The linear extensions are generated according to the algorithm given in Habib M, Medina R, Nourine L and Steiner G (2001).

Usage

ExactEvaluation(poset, output_every_sec = NULL, f1, ...)

Value

A list of the computed averages, along with the number of linear extensions generated to compute them.

Arguments

poset

An object of S4 class POSet representing the poset from which linear extensions are generated. Argument poset must be created by using any function contained in the package aimed at building object of S4 class POSet (e.g. POSet(), LinearPOSet(), ProductPOSet(), ...) .

output_every_sec

integer specifying a time interval (in seconds). By specifying this argument, during the execution of BubleyDyerEvaluation, the number of linear extensions progressively generated is printed on the R-Console, every output_every_secseconds.

f1

the function whose average value has to be computed. f1 can be an R-function having as a single argument a linear extension of poset and returning a numerical matrix.

...

Further functions whose averages are to be computed.

References

Habib M, Medina R, Nourine L and Steiner G (2001). Efficient algorithms on distributive lattices. Discrete Applied Mathematics, 110, 169-187. https://doi.org/10.1016/S0166-218X(00)00258-4.

Examples

Run this code
el1 <- c("a", "b", "c", "d")
el2 <- c("x", "y")
el3 <- c("h", "k")
dom <- matrix(c(
  "a", "b",
  "c", "b",
  "b", "d"
), ncol = 2, byrow = TRUE)

pos1 <- POSet(elements = el1, dom = dom)

pos2 <- LinearPOSet(elements = el2)

pos3 <- LinearPOSet(elements = el3)

pos <- ProductPOSet(pos1, pos2, pos3)

# median_distr computes the frequency distribution of median profile

elements <- POSetElements(pos)

median_distr <- function(le) {
  n <- length(elements)
  if (n %% 2 != 0) {
    res <- (elements == le[(n + 1) / 2])
  } else {
    res <- (elements == le[n / 2])
  }
  res <- as.matrix(res)
  rownames(res) <- elements
  colnames(res) <- "median_distr"
  return (as.matrix(res))
}
# \donttest{
res  <- ExactEvaluation(pos, output_every_sec=1, median_distr)
# }

Run the code above in your browser using DataLab