Extract information from a multi-value SOP/DNF expression
Functions to extract information from an expression written in SOP - sum of products form, (or from the canonical DNF - disjunctive normal form) for multi-value causal conditions. It extracts either the values within brackets, or the causal conditions' names outside the brackets.
insideBrackets(x, type = "[", invert = FALSE) outsideBrackets(x, type = "[") curlyBrackets(x, outside = FALSE) squareBrackets(x, outside = FALSE) roundBrackets(x, outside = FALSE)
x |
A DNF/SOP expression. |
type |
Brackets type: curly, round or square |
invert |
Logical, if activated returns whatever is not within the brackets |
outside |
Logical, if activated returns the conditions' names outside the brackets |
Expressions written in SOP - sum of products are used in Boolean logic, signaling a disjunction of conjunctions.
These expressions are useful in Qualitative Comparative Analysis, a social science methodology that is employed in the context of searching for causal configurations that are associated with a certain outcome.
They are also used to draw Venn diagrams with the package venn
, which draws any
kind of set intersection (conjunction) based on a custom SOP expression.
The functions curlyBrackets
, squareBrackets
and
roundBrackets
are just special cases of the functions insideBrackets
and outsideBrackets
, using the argument type
as either
"{"
, "["
or "("
.
The function outsideBrackets
itself can be considered a special case of the
function insideBrackets
, when it uses the argument invert = TRUE
.
SOP expressions are usually written using curly brackets for multi-value conditions but to allow
the evaluation of unquoted expressions, they first needs to get past R's internal parsing system.
For this reason, multi-value conditions in unquoted expresions should use the square brackets
notation, and conjunctions should always use the product *
sign.
Sufficiency is recognized as "=>"
in quoted expressions but this does not pass over R's
parsing system in unquoted expressions. To overcome this problem, it is best to use the single
arrow "->"
notation. Necessity is recognized as either "<="
or "<-"
, both
being valid in quoted and unquoted expressions.
Adrian Dusa
sop <- "A[1] + B[2]*C[0]" insideBrackets(sop) # 1, 2, 0 insideBrackets(sop, invert = TRUE) # A, B, C # unquoted (valid) SOP expressions are allowed, same result insideBrackets(A[1] + B[2]*C[0]) # the default type is "[" # curly brackets are also valid in quoted expressions insideBrackets("A{1} + B{2}*C{0}", type = "{") # or curlyBrackets("A{1} + B{2}*C{0}") # and the condition names curlyBrackets("A{1} + B{2}*C{0}", outside = TRUE) squareBrackets(A[1] + B[2]*C[0]) # 1, 2, 0 squareBrackets(A[1] + B[2]*C[0], outside = TRUE) # A, B, C
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.