Expressions are used to define filter logic for passing to a Dataset
Scanner. FieldExpressions refer to columns in the Dataset and are
compared to ScalarExpressions using ComparisonExpressions.
ComparisonExpressions may be combined with AndExpression or
OrExpression and negated with NotExpression. IsValidExpression is
essentially is.na() for Expressions.
FieldExpression$create(name) takes a string name as input. This string should
refer to a column in a Dataset at the time it is evaluated, but you can
construct a FieldExpression independently of any Dataset.
ScalarExpression$create(x) takes a scalar (length-1) R value as input.
ComparisonExpression$create(OP, e1, e2) takes a string operator name
(e.g. "==", "!=", ">", etc.) and two Expression objects.
AndExpression$create(e1, e2) and OrExpression$create(e1, e2) take
two Expression objects, while NotExpression$create(e1) and
IsValidExpression$create(e1) take a single Expression.