library("broadcast")
# maths ====
<- 1:10
x <- 1:10
y bc_chain(~ x + y / x)
## [1] 2 3 4 5 6 7 8 9 10 11
+ 1 # mathematically equivalent to the above, since x == y
x ## [1] 2 3 4 5 6 7 8 9 10 11
bc_chain(~ (x + y) / x)
## [1] 2 2 2 2 2 2 2 2 2 2
2 * x/x # mathematically equivalent to the above, since x == y
## [1] 2 2 2 2 2 2 2 2 2 2
dim(x) <- c(10, 1)
dim(y) <- c(1, 10)
bc_chain(~ x + y / x)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000
## [2,] 2.500000 3.000000 3.500000 4.000000 4.500000 5.000000 5.500000
## [3,] 3.333333 3.666667 4.000000 4.333333 4.666667 5.000000 5.333333
## [4,] 4.250000 4.500000 4.750000 5.000000 5.250000 5.500000 5.750000
## [5,] 5.200000 5.400000 5.600000 5.800000 6.000000 6.200000 6.400000
## [6,] 6.166667 6.333333 6.500000 6.666667 6.833333 7.000000 7.166667
## [7,] 7.142857 7.285714 7.428571 7.571429 7.714286 7.857143 8.000000
## [8,] 8.125000 8.250000 8.375000 8.500000 8.625000 8.750000 8.875000
## [9,] 9.111111 9.222222 9.333333 9.444444 9.555556 9.666667 9.777778
## [10,] 10.100000 10.200000 10.300000 10.400000 10.500000 10.600000 10.700000
## [,8] [,9] [,10]
## [1,] 9.000000 10.000000 11.000000
## [2,] 6.000000 6.500000 7.000000
## [3,] 5.666667 6.000000 6.333333
## [4,] 6.000000 6.250000 6.500000
## [5,] 6.600000 6.800000 7.000000
## [6,] 7.333333 7.500000 7.666667
## [7,] 8.142857 8.285714 8.428571
## [8,] 9.000000 9.125000 9.250000
## [9,] 9.888889 10.000000 10.111111
## [10,] 10.800000 10.900000 11.000000
bc_chain(~ (x + y) / x)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000
## [2,] 1.500000 2.000000 2.500000 3.000000 3.500000 4.000000 4.500000 5.000000
## [3,] 1.333333 1.666667 2.000000 2.333333 2.666667 3.000000 3.333333 3.666667
## [4,] 1.250000 1.500000 1.750000 2.000000 2.250000 2.500000 2.750000 3.000000
## [5,] 1.200000 1.400000 1.600000 1.800000 2.000000 2.200000 2.400000 2.600000
## [6,] 1.166667 1.333333 1.500000 1.666667 1.833333 2.000000 2.166667 2.333333
## [7,] 1.142857 1.285714 1.428571 1.571429 1.714286 1.857143 2.000000 2.142857
## [8,] 1.125000 1.250000 1.375000 1.500000 1.625000 1.750000 1.875000 2.000000
## [9,] 1.111111 1.222222 1.333333 1.444444 1.555556 1.666667 1.777778 1.888889
## [10,] 1.100000 1.200000 1.300000 1.400000 1.500000 1.600000 1.700000 1.800000
## [,9] [,10]
## [1,] 10.000000 11.000000
## [2,] 5.500000 6.000000
## [3,] 4.000000 4.333333
## [4,] 3.250000 3.500000
## [5,] 2.800000 3.000000
## [6,] 2.500000 2.666667
## [7,] 2.285714 2.428571
## [8,] 2.125000 2.250000
## [9,] 2.000000 2.111111
## [10,] 1.900000 2.000000
bc_chain(~ ifelse(x > 1, y, x)) # ifelse and apply are not overloaded
## [,1]
## [1,] 1
## [2,] 2
## [3,] 3
## [4,] 4
## [5,] 5
## [6,] 6
## [7,] 7
## [8,] 8
## [9,] 9
## [10,] 10
# relational operators ====
<- 1:10
x <- array(1:10, c(1, 10))
y
bc_chain(~ x == y)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2,] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [3,] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
## [5,] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
## [6,] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
## [7,] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
## [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
## [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
bc_chain(~ x != y)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [2,] TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [3,] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [4,] TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
## [5,] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
## [6,] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE
## [7,] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
## [8,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
## [9,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
## [10,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
bc_chain(~ x < y)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [2,] FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [3,] FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [4,] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
## [5,] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
## [6,] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
## [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
## [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE
## [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
bc_chain(~ x > y)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2,] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [3,] TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [4,] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [5,] TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
## [6,] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
## [7,] TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE
## [8,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE
## [9,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
## [10,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
bc_chain(~ x <= y)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [2,] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [3,] FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [4,] FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [5,] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
## [6,] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
## [7,] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
## [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
## [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
bc_chain(~ x >= y)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2,] TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [3,] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [4,] TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
## [5,] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
## [6,] TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE
## [7,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE
## [8,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
## [9,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
## [10,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
bc_chain
Evaluate a Chain of Mathematical Operations with Broadcasting
Description
The user can supply a formula giving a mathematical (-like) expression in the bc_chain()
function.
Inside bc_chain()
, the expression is evaluated, where the base operators (+, -, *, /, etc.) have been overloaded to use broadcasting.
I.e. bc_chain(~ x + y)
is equivalent to bc.num(x, y, “+”)
.
What sets bc_chain()
apart from the other bc.
-functions, other than the different syntax, is that the user can chain together multiple arithmetic operators, with the usual mathematical precedence and backeting rules.
For example:
bc_chain(~ (x + y) / z)
Usage
bc_chain(f)
Arguments
f
|
a formula giving the expression to evaluate. The environment of f is used to find the variables. If environment(f) is NULL , the environment from which bc_chain() was called is used to find the variables. |
Value
The result from the broadcasted operation.