Skip to contents

tf_mv classes (tfd_mv / tfb_mv) inherit from "tf" so that tf_domain(), the type predicates (is_tf(), is_tf_mv(), ...) and S4 generic reuse continue to work. Behaviour on tf_mv objects, however, is supplied only by explicitly registered .tf_mv methods: any generic without one aborts with a classed tf_mv_method_unimplemented condition. This avoids silent fall-through to the univariate method, which would otherwise produce wrong-shape results or deep internal errors.

Details

Some verbs are permanently stubbed because they have no well-defined vector-valued semantics: sort(), rank() and xtfrm() (no canonical total order on \(R^d\) – use tf_order() with by = instead), and tf_invert() (function inversion requires a monotone scalar function, which a vector-valued f: R -> R^d is not – invert a monotone component instead, e.g. tf_invert(f$x)).

Real component-wise semantics (joint vs. per-component, norm-based, ...) are being designed verb-by-verb in https://github.com/tidyfun/tf/issues/255; tf_crosscov() / tf_crosscor() remain blocked pending their joint design (https://github.com/tidyfun/tf/issues/274).