test_that("create agentMatrix does not work", {
newAgent <- new("agentMatrix",
coords = cbind(pxcor = c(1, 2, 5), pycor = c(3, 4, 6)),
char = letters[c(1, 2, 6)],
nums2 = c(4.5, 2.6, 2343),
char2 = LETTERS[c(4, 24, 3)],
nums = 5:7
)
expect_is(newAgent, "agentMatrix")
# test levelsAM, which should be faster
newAgent <- new("agentMatrix",
mat = cbind(
char = sample(1:3, replace = TRUE, size = 10),
char2 = sample(1:2, replace = TRUE, size = 10),
num2 = sample(1:10, replace = TRUE, size = 10)
),
levelsAM = list(
char = c("a", "b", "f"),
char2 = c("test", "fail")
)
)
expect_is(newAgent, "agentMatrix")
expect_true(all(is.na(coordinates(newAgent))))
expect_is(coordinates(newAgent), "matrix")
expect_true(all(colnames(newAgent) == c("xcor", "ycor", "char", "char2", "num2")))
# test agentMatrix call with levelsAM
newAgent <- agentMatrix(
mat = cbind(
char = sample(1:3, replace = TRUE, size = 10),
char2 = sample(1:2, replace = TRUE, size = 10),
num2 = sample(1:10, replace = TRUE, size = 10)
),
levelsAM = list(
char = c("a", "b", "f"),
char2 = c("test", "fail")
)
)
expect_is(newAgent, "agentMatrix")
expect_true(all(is.na(coordinates(newAgent))))
expect_is(coordinates(newAgent), "matrix")
expect_true(all(colnames(newAgent) == c("xcor", "ycor", "char", "char2", "num2")))
# test agentMatrix call with levelsAM
newAgent <- agentMatrix(
coords = cbind(pxcor = 1:10, pycor = 1:10),
mat = cbind(
char = sample(1:3, replace = TRUE, size = 10),
char2 = sample(1:2, replace = TRUE, size = 10),
num2 = sample(1:10, replace = TRUE, size = 10)
),
levelsAM = list(
char = c("a", "b", "f"),
char2 = c("test", "fail")
)
)
expect_is(newAgent, "agentMatrix")
expect_true(all(!is.na(coordinates(newAgent))))
expect_is(coordinates(newAgent), "matrix")
expect_true(all(colnames(newAgent) == c("xcor", "ycor", "char", "char2", "num2")))
# test coordinates missing
newAgent <- new("agentMatrix",
char = letters[c(1, 2, 6)],
nums2 = c(4.5, 2.6, 2343),
char2 = LETTERS[c(4, 24, 3)],
nums = 5:7
)
expect_is(newAgent, "agentMatrix")
expect_true(all(is.na(coordinates(newAgent))))
expect_is(coordinates(newAgent), "matrix")
expect_equal(dim(coordinates(newAgent)), c(3, 2))
# test all numeric matrix
mat <- cbind(nums1 = 1:3, nums2 = 2:4)
newAgent <- new("agentMatrix", mat = mat)
expect_is(newAgent, "agentMatrix")
expect_true(all(is.na(coordinates(newAgent))))
expect_is(coordinates(newAgent), "matrix")
expect_equal(dim(coordinates(newAgent)), c(3, 2))
expect_equal(colnames(newAgent), c("xcor", "ycor", "nums1", "nums2"))
mat <- cbind(nums1 = 1:3, nums2 = 2:4)
mat2 <- cbind(nums3 = 1:3, nums4 = 2:4)
expect_silent(newAgent <- new("agentMatrix", mat = mat, mat2 = mat2))
expect_is(newAgent, "agentMatrix")
expect_true(all(is.na(coordinates(newAgent))))
expect_is(coordinates(newAgent), "matrix")
expect_equal(dim(coordinates(newAgent)), c(3, 2))
expect_equal(colnames(newAgent), c("xcor", "ycor", "nums1", "nums2", "nums3", "nums4"))
mat <- cbind(nums1 = 1:3, nums2 = 2:4)
newAgent <- new("agentMatrix", mat = mat, coords = matrix(1:6, ncol = 2))
expect_is(newAgent, "agentMatrix")
expect_true(all(!is.na(coordinates(newAgent))))
expect_is(coordinates(newAgent), "matrix")
expect_equal(dim(coordinates(newAgent)), c(3, 2))
expect_equal(colnames(newAgent), c("xcor", "ycor", "nums1", "nums2"))
# test all numeric vectors
newAgent <- new("agentMatrix", nums1 = 1:3, nums2 = 2:4)
expect_is(newAgent, "agentMatrix")
expect_true(all(is.na(coordinates(newAgent))))
expect_is(coordinates(newAgent), "matrix")
expect_equal(dim(coordinates(newAgent)), c(3, 2))
expect_equal(colnames(newAgent), c("xcor", "ycor", "nums1", "nums2"))
# mixed numeric and character matrices and vectors
newAgent <- new("agentMatrix",
chars = cbind(char1 = letters[c(1, 2, 6)], char2 = LETTERS[c(4, 24, 3)]),
nums1 = 4:6,
charsA = cbind(char3 = letters[c(1, 2, 6)], char4 = LETTERS[c(4, 24, 3)]),
nums2 = 1:3
)
expect_is(newAgent, "agentMatrix")
expect_true(all(is.na(coordinates(newAgent))))
expect_is(coordinates(newAgent), "matrix")
expect_equal(dim(coordinates(newAgent)), c(3, 2))
expect_equal(colnames(newAgent), c(
"xcor", "ycor", "char1", "char2", "nums1", "char3",
"char4", "nums2"
))
# mixed numeric and character matrices and vectors
newAgent <- new("agentMatrix",
chars = cbind(char1 = letters[c(1, 2, 6)], char2 = LETTERS[c(4, 24, 3)]),
nums1 = 4:6,
charsA = cbind(char3 = letters[c(1, 2, 6)], char4 = LETTERS[c(4, 24, 3)]),
nums2 = 1:3,
coords = matrix(1:6, ncol = 2)
)
expect_is(newAgent, "agentMatrix")
expect_true(all(!is.na(coordinates(newAgent))))
expect_is(coordinates(newAgent), "matrix")
expect_equal(dim(coordinates(newAgent)), c(3, 2))
expect_equal(colnames(newAgent), c(
"xcor", "ycor", "char1", "char2", "nums1", "char3",
"char4", "nums2"
))
})
test_that("agentMatrix benchmarking", {
skip_on_cran()
skip_on_ci()
set.seed(20180924) ## TODO: why are some seeds failing?
# compare speeds -- if these fail, then should reconsider the need for agentMatrix
if (require(microbenchmark)) {
mb <- summary(microbenchmark::microbenchmark(
times = 50,
spdf = {
if (requireNamespace("sp", quietly = TRUE)) {
sp::SpatialPointsDataFrame(
coords = cbind(pxcor = c(1, 2, 5), pycor = c(3, 4, 6)),
data = data.frame(
char = letters[c(1, 2, 6)],
nums2 = c(4.5, 2.6, 2343),
char2 = LETTERS[c(4, 24, 3)],
nums = 5:7
)
)
}
},
agentMat = {
agentMatrix(
coords = cbind(
pxcor = c(1, 2, 5),
pycor = c(3, 4, 6)
),
char = letters[c(1, 2, 6)],
nums2 = c(4.5, 2.6, 2343),
char2 = LETTERS[c(4, 24, 3)],
nums = 5:7
)
},
agentMatDirect = {
new("agentMatrix",
coords = cbind(
pxcor = c(1, 2, 5),
pycor = c(3, 4, 6)
),
char = letters[c(1, 2, 6)],
nums2 = c(4.5, 2.6, 2343),
char2 = LETTERS[c(4, 24, 3)],
nums = 5:7
)
}
))
if (requireNamespace("sp", quietly = TRUE)) {
expect_gt(mb$median[1] / mb$median[3], 3)
} # expect it is ~3 times faster
}
# check just numerics
if (requireNamespace("sf", quietly = TRUE)) {
if (requireNamespace("microbenchmark", quietly = TRUE)) {
mb <- summary(microbenchmark::microbenchmark(
times = 50,
spdf = {
if (requireNamespace("sp", quietly = TRUE)) {
sp::SpatialPointsDataFrame(
coords = cbind(pxcor = c(1, 2, 5), pycor = c(3, 4, 6)),
data = data.frame(
nums2 = c(4.5, 2.6, 2343),
nums = 5:7
)
)
}
},
sf = {
a1 <- sf::st_point(cbind(1, 3))
a2 <- sf::st_point(cbind(2, 4))
a3 <- sf::st_point(cbind(5, 6))
d <- data <- data.frame(nums2 = c(4.5, 2.6, 2343), nums = 5:7)
d$geom <- sf::st_sfc(a1, a2, a3)
df <- sf::st_as_sf(d)
},
agentMat = {
agentMatrix(
coords = cbind(pxcor = c(1, 2, 5), pycor = c(3, 4, 6)),
nums2 = c(4.5, 2.6, 2343), nums = 5:7
)
},
agentMatDirect = {
new("agentMatrix",
coords = cbind(pxcor = c(1, 2, 5), pycor = c(3, 4, 6)),
nums2 = c(4.5, 2.6, 2343), nums = 5:7
)
}
))
if (requireNamespace("sp", quietly = TRUE)) {
expect_gt(mb$median[1] / mb$median[3], 4)
} # use 4 for safety
if (interactive()) expect_gt(mb$median[2] / mb$median[3], 2) # use 2 for safety
}
}
})
test_that("agentMatrix coercion", {
skip_if_not_installed("sp")
spdf1 <- sp::SpatialPointsDataFrame(
coords = matrix(1:6, ncol = 2),
data = data.frame(tmp = 1:3, tmp2 = c("e", "f", "g"))
)
newAgent <- agentMatrix(spdf1)
expect_is(newAgent, "agentMatrix")
expect_true(all(!is.na(coordinates(newAgent))))
expect_is(coordinates(newAgent), "matrix")
expect_equal(dim(coordinates(newAgent)), c(3, 2))
expect_equal(colnames(newAgent), c("xcor", "ycor", "tmp", "tmp2"))
# test setAs from matrix
mat <- cbind(coords = matrix(1:6, ncol = 2), tmp = 1:3, tmp2 = 4:6)
newAgent <- as(mat, "agentMatrix")
expect_is(newAgent, "agentMatrix")
expect_true(all(!is.na(coordinates(newAgent))))
expect_is(coordinates(newAgent), "matrix")
expect_equal(dim(coordinates(newAgent)), c(3, 2))
expect_equal(colnames(newAgent), c("xcor", "ycor", "tmp", "tmp2"))
# test setAs from data.frame
mat <- cbind(coords = matrix(1:6, ncol = 2), data.frame(tmp = 1:3, tmp2 = c("e", "f", "g")))
newAgent <- as(mat, "agentMatrix")
expect_is(newAgent, "agentMatrix")
expect_true(all(!is.na(coordinates(newAgent))))
expect_is(coordinates(newAgent), "matrix")
expect_equal(dim(coordinates(newAgent)), c(3, 2))
expect_equal(colnames(newAgent), c("xcor", "ycor", "tmp", "tmp2"))
})
test_that("agentMatrix subsetting", {
# subsetting keeps an agentMatrix, just like subsetting SPDF
# character column
mat <- cbind(coords = matrix(1:6, ncol = 2), data.frame(tmp = 1:3, tmp2 = c("e", "f", "g")))
newAgent <- as(mat, "agentMatrix")
tmpA <- as(newAgent[2, 4], "data.frame")
tmpB <- as(agentMatrix(
coords = coordinates(newAgent)[2, , drop = FALSE],
tmp2 = cbind(tmp2 = newAgent@levels[["tmp2"]][
newAgent@.Data[2, 4, drop = FALSE]
])
), "data.frame")
expect_true(all.equal(tmpA, tmpB))
tmpA <- newAgent[2, 3]
tmpB <- agentMatrix(
coords = coordinates(newAgent)[2, , drop = FALSE],
tmp2 = newAgent@.Data[2, 3, drop = FALSE]
)
expect_true(all.equal(tmpA, tmpB))
# test various [ ]
expect_equal(newAgent[], data.frame(
xcor = newAgent$xcor, ycor = newAgent$ycor,
tmp = newAgent$tmp, tmp2 = newAgent$tmp2,
stringsAsFactors = FALSE
))
expect_equal(newAgent[, "tmp", drop = FALSE], agentMatrix(
coords = coordinates(newAgent),
tmp = newAgent@.Data[, "tmp", drop = FALSE]
))
expect_equal(newAgent[1:2, "tmp"], agentMatrix(coords = coordinates(newAgent)[
1:2, ,
drop = FALSE
], tmp = newAgent@.Data[1:2, "tmp", drop = FALSE]))
expect_equal(newAgent[, 3, drop = FALSE], agentMatrix(
coords = coordinates(newAgent)[, , drop = FALSE],
tmp = newAgent@.Data[, 3, drop = FALSE]
))
# character column
tmpA <- as(newAgent[, 4], "data.frame")
tmpB <- as(agentMatrix(
coords = coordinates(newAgent)[, , drop = FALSE],
tmp = cbind(tmp2 = newAgent@levels[["tmp2"]][newAgent@.Data[
, 4,
drop = FALSE
]])
), "data.frame")
expect_true(all.equal(tmpA, tmpB))
# numeric
tmpA <- newAgent[, 3]
tmpB <- agentMatrix(coords = coordinates(newAgent), tmp2 = newAgent@.Data[, 3, drop = FALSE])
expect_true(all.equal(tmpA, tmpB))
mat <- cbind(coords = matrix(1:6, ncol = 2), data.frame(tmp = 1:3, tmp2 = c("e", "f", "g")))
newAgent <- as(mat, "agentMatrix")
expect_equal(1, sum(newAgent[, "tmp2", drop = FALSE] == "f"))
expect_equal(1, sum(newAgent[, "tmp", drop = FALSE] == 2))
mat <- cbind(coords = matrix(1:6, ncol = 2), data.frame(
tmp = 1:3, tmp1 = 1:3,
tmp2 = c("e", "f", "g")
))
newAgent <- as(mat, "agentMatrix")
expect_equal(2, sum(newAgent == 2))
am <- agentMatrix(coords = matrix(1:6, ncol = 2))
expect_warning(am == 1)
expect_warning(am == "test")
am <- agentMatrix(coords = matrix(1:6, ncol = 2), mat = 1:3)
expect_false(all(am == "test"))
})
test_that("agentMatrix rbind cbind, tail, head, nrow, length, show", {
mat <- cbind(coords = matrix(1:6, ncol = 2), data.frame(
tmp = 1:3, tmp1 = 1:3,
tmp2 = c("e", "f", "g")
))
newAgent <- as(mat, "agentMatrix")
mat <- cbind(coords = matrix(1:6, ncol = 2), data.frame(tmp = 1:3, tmp2 = c("e", "f", "g")))
mat2 <- cbind(coords = matrix(1:6, ncol = 2), data.frame(tmp = 1:3, tmp2 = c("e", "f", "g")))
newAgent1 <- as(mat, "agentMatrix")
newAgent2 <- as(mat2, "agentMatrix")
newA <- rbind(newAgent1, newAgent2)
expect_true(NROW(newA) == 6)
expect_true(all(colnames(newA) == c("xcor", "ycor", "tmp", "tmp2")))
newA <- rbind(newAgent1[, 3], newAgent2[, 3])
expect_true(NROW(newA) == 6)
expect_true(ncol(newA) == 3)
expect_true(all(colnames(newA) == c("xcor", "ycor", "tmp")))
newA <- rbind(newAgent, newAgent1)
expect_true(NROW(newA) == 6)
expect_true(all(colnames(newA) == c("xcor", "ycor", "tmp", "tmp1", "tmp2")))
mat <- cbind(coords = matrix(1:6, ncol = 2), data.frame(tmp3 = 1:3, tmp4 = c("e", "f", "g")))
mat2 <- cbind(coords = matrix(1:6, ncol = 2), data.frame(tmp = 1:3, tmp2 = c("e", "f", "g")))
newAgent1 <- as(mat, "agentMatrix")
newAgent2 <- as(mat2, "agentMatrix")
cbound <- cbind(newAgent1, newAgent2)
expect_is(cbound, "agentMatrix")
expect_true(ncol(cbound) == 6)
expect_true(nrow(cbound) == 3)
expect_true(all(colnames(cbound) == c("xcor", "ycor", "tmp3", "tmp4", "tmp", "tmp2")))
expect_true(all(cbound@.Data[, "tmp2"] == 1:3))
expect_true(all(cbound$tmp4 == c("e", "f", "g")))
expect_error(cbound <- cbind(newAgent1, newAgent2, newAgent))
expect_error(cbound <- cbind(newAgent1, newAgent1))
mat <- cbind(coords = matrix(1:6, ncol = 2), data.frame(tmp3 = 1:3, tmp4 = c("e", "f", "g")))
mat2 <- cbind(coords = matrix(1:2, ncol = 2), data.frame(tmp = 1, tmp2 = c("e")))
newAgent1 <- as(mat, "agentMatrix")
newAgent2 <- as(mat2, "agentMatrix")
cbound <- cbind(newAgent1, newAgent2)
expect_is(cbound, "agentMatrix")
# test tail and head
expect_true(nrow(tail(cbound, 1)) == 1)
expect_is(tail(cbound, 1), "agentMatrix")
expect_true(nrow(head(cbound, 1)) == 1)
expect_true(all.equal(dim(cbound)[2], dim(head(cbound, 1))[2]))
# test nrow
expect_true(nrow(cbound) == nrow(cbound@.Data))
expect_true(length(cbound) == length(cbound@.Data))
# test show
outShow <- capture.output(cbound)
expect_true(length(outShow) == 4)
expect_true(grep(outShow, pattern = c("tmp3 tmp4 tmp tmp2")) == 1)
expect_true(all(grep(outShow, pattern = c("1 1")) == c(2)))
expect_true(all(grep(outShow, pattern = c("e 1")) == c(2)))
expect_true(all(grep(outShow, pattern = c("f 1")) == 3))
newAgent <- agentMatrix()
outShow <- capture.output(newAgent)
expect_equivalent(outShow, "<0 x 0 matrix>")
expect_is(newAgent, "agentMatrix")
})
test_that("agentMatrix replace methods don't work", {
mat <- cbind(
coords = matrix(1:6, ncol = 2),
data.frame(tmp = 1:3, tmp1 = 1:3, tmp2 = c("e", "f", "g")),
tmpCh = LETTERS[3:5]
)
newAgent <- as(mat, "agentMatrix")
newAgent[1, 4] <- 3
expect_true(newAgent[1, 4] == 3)
newAgent[, 4] <- 4:2
expect_true(all(newAgent[][, 4] == (4:2)))
newAgent[, "tmp"] <- 5:3
expect_true(all(newAgent[][, "tmp"] == (5:3)))
newAgent[1, "tmp2"] <- "s"
expect_true(newAgent$tmp2[1] == "s")
# simple data.frame
newAgent[1:2, c("tmp", "tmp2")] <- data.frame(
tmp = 6:7, tmp2 = c("r", "w"),
stringsAsFactors = FALSE
)
expect_true(all(newAgent$tmp[1:2] == 6:7)) # is numeric
expect_true(all(newAgent$tmp2[1:2] == c("r", "w"))) # maintains character
expect_true(all(newAgent$tmp2[3] == c("g"))) # untouched
# more complicated data.frame
newAgent[1:2, c("tmp", "tmp1", "tmp2", "tmpCh")] <- data.frame(
tmp = 6:7, tmp1 = 11:12, tmp2 = c("r", "w"), tmpCh = LETTERS[13:14],
stringsAsFactors = FALSE
)
expect_true(all(newAgent$tmp[1:2] == 6:7)) # is numeric
expect_true(all(newAgent$tmp2[1:2] == c("r", "w"))) # maintains character
expect_true(all(newAgent$tmp2[3] == c("g"))) # untouched
# character
newAgent[, 5] <- letters[6:8]
expect_true(all(newAgent[, 5] == letters[6:8]))
newAgent[, "tmp2"] <- letters[9:11]
expect_true(all(newAgent$tmp2 == letters[9:11]))
newAgent[1, 5] <- "t" # test a new value for the column
expect_true(newAgent[1, 5] == "t")
# data.frame with non existent columns
expect_error(newAgent[1:2, c("tmp", "tmp4")] <- data.frame(
tmp = 9:10, tmp4 = 15:16,
stringsAsFactors = FALSE
))
# Weird, numeric missing numeric ... this replaces a whole row
mat <- cbind(coords = matrix(1:6, ncol = 2), data.frame(tmp = 1:3, tmp1 = 1:3))
newAgent <- as(mat, "agentMatrix")
newAgent[1, ] <- 1:4
expect_true(all(newAgent[][1, ] == 1:4))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.