Nothing
context("Parser")
test_that("Addition and multiplication is parseable.",
{
ast <- Parser$new()$run("`col1 a` + col2 + col3 ~ drug*age+spiders")
###############################################################
##
## Abstract Syntax Tree (AST) for
## col1 + col2 + col3 ~ drug*age+spiders
##
## table
## / \
## ___/ \___
## / \
## / \
## + +
## / \ / \
## / \ / \
## col1 + * spiders
## / \ / \
## / \ / \
## col2 col3 drug age
##
##################################################################
expect_true(inherits(ast, "ASTTableFormula"))
expect_true(inherits(ast$left, "ASTPlus"))
expect_true(inherits(ast$left$left, "ASTVariable"))
expect_equal(ast$left$left$value, "col1 a")
expect_true(inherits(ast$left$right, "ASTPlus"))
expect_true(inherits(ast$left$right$left, "ASTVariable"))
expect_equal(ast$left$right$left$value, "col2")
expect_true(inherits(ast$left$right$right, "ASTVariable"))
expect_equal(ast$left$right$right$value, "col3")
expect_true(inherits(ast$right, "ASTPlus"))
expect_true(inherits(ast$right$left, "ASTMultiply"))
expect_true(inherits(ast$right$left$left, "ASTVariable"))
expect_equal(ast$right$left$left$value, "drug")
expect_true(inherits(ast$right$left$right, "ASTVariable"))
expect_equal(ast$right$left$right$value, "age")
expect_true(inherits(ast$right$right, "ASTVariable"))
expect_equal(ast$right$right$value, "spiders")
})
test_that("functions with nested parenthesis and r-expression characters are parsed.",
{
ast <- Parser$new()$run("x+func_.123(10^23/([[rough]]~2)+3) ~ y")
expect_true(inherits(ast, "ASTTableFormula"))
expect_true(inherits(ast$left, "ASTPlus"))
expect_true(inherits(ast$left$left, "ASTVariable"))
expect_equal(ast$left$left$value, "x")
expect_true(inherits(ast$left$right, "ASTFunction"))
expect_equal(ast$left$right$value, "func_.123")
expect_equal(ast$left$right$r_expr, "10^23/([[rough]]~2)+3")
})
test_that("type specifier information is extracted correctly.",
{
ast <- Parser$new()$run("a+b[23]+c::Binomial ~ d[\"%03.2g\"] * f::Categorical[4]")
expect_true(inherits(ast, "ASTTableFormula"))
expect_true(inherits(ast$left, "ASTPlus"))
expect_true(inherits(ast$left$left, "ASTVariable"))
expect_equal(ast$left$left$value, "a")
expect_identical(ast$left$left$format, NA)
expect_identical(ast$left$left$type, NA)
expect_true(inherits(ast$left$right, "ASTPlus"))
expect_true(inherits(ast$left$right$left, "ASTVariable"))
expect_equal(ast$left$right$left$value, "b")
expect_equal(ast$left$right$left$format, "23")
expect_identical(ast$left$right$left$type, NA)
expect_true(inherits(ast$left$right$right, "ASTVariable"))
expect_equal(ast$left$right$right$value, "c")
expect_identical(ast$left$right$right$format, NA)
expect_equal(ast$left$right$right$type, "Binomial")
expect_true(inherits(ast$right, "ASTMultiply"))
expect_true(inherits(ast$right$left, "ASTVariable"))
expect_equal(ast$right$left$value, "d")
expect_equal(ast$right$left$format, "%03.2g")
expect_identical(ast$right$left$type, NA)
expect_true(inherits(ast$right$right, "ASTVariable"))
expect_equal(ast$right$right$value, "f")
expect_equal(ast$right$right$format, "4")
expect_equal(ast$right$right$type, "Categorical")
})
test_that("multiplication distributes correctly",
{
expect_equal(
Parser$new()$run("(a+b)*(c+d)~e*f*(g+h)*i")$distribute()$string(),
"a*c+a*d+b*c+b*d ~ e*f*g*i+e*f*h*i"
)
})
test_that("reduction via data works",
{
df <- data.frame(x=rnorm(20), y=1:20)
reducto <- Parser$new()$run("y ~ x")$reduce(df)
expect_equal(reducto$left$data, df[,"y"])
expect_equal(reducto$right$data, df[,"x"])
})
test_that("reduction via data works with spaces in variable name",
{
df <- data.frame(x=rnorm(20), y=1:20)
names(df) <- c("a b c", "d e f")
reducto <- Parser$new()$run("`d e f` ~ `a b c`")$reduce(df)
expect_equal(reducto$left$data, df[,"d e f"])
expect_equal(reducto$right$data, df[,"a b c"])
})
test_that("reduction via data works with minus in variable name",
{
df <- data.frame(`x-y`=rnorm(20), y=1:20, check.names=FALSE)
reducto <- Parser$new()$run("y ~ `x-y`")$reduce(df)
expect_equal(reducto$left$data, df[,"y"])
expect_equal(reducto$right$data, df[,"x-y"])
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.