Nothing
context("divide Plot")
data("NouraguesCoords")
data("NouraguesPlot201")
data("NouraguesTrees")
corner_data <- suppressWarnings(check_plot_coord(NouraguesPlot201, proj_coord = c("Xutm","Yutm"), rel_coord = c("Xfield","Yfield"), trust_GPS_corners = T, draw_plot = F))$corner_coord
test_that("divide_plot error", {
expect_error(divide_plot(rel_coord = corner_data[c("x_rel","y_rel")]),
"The way in which arguments are provided to the function has changed since version 2.2.1. You now have to provide corner_data data frame and its associated coordinates variable names.")
expect_error(divide_plot(as.matrix(corner_data), c("x_rel","y_rel"), grid_size = 25), "corner_data must be a data frame or a data frame extension")
expect_error(divide_plot(corner_data, rel_coord = c("Xfield","Yfield")), "column names provided by rel_coord are not found in corner_data")
expect_error(divide_plot(corner_data, rel_coord = c("x_rel","y_rel"), proj_coord = c("Xutm","Yutm")), "column names provided by proj_coord are not found in corner_data")
expect_error(divide_plot(corner_data, rel_coord = c("x_rel","y_rel"), longlat = c("Xutm","Yutm")), "column names provided by longlat are not found in corner_data")
expect_error(divide_plot(corner_data = NouraguesCoords, rel_coord = c("Xfield","Yfield"), grid_size = c(25,25,25)), "you must apply yourself the function for each plot")
expect_error(divide_plot(corner_data = NouraguesCoords, c("Xfield","Yfield"), grid_size = 25), "You must provide corner_plot_ID if you have more than one plot in your data")
expect_error(divide_plot(corner_data = NouraguesCoords, c("Xfield","Yfield"), grid_size = 25, corner_plot_ID = "a"), "is not found in corner_data column names.")
expect_error(divide_plot(NouraguesPlot201, c("Xfield","Yfield"), grid_size = 25, corner_plot_ID = "Plot"), "corner_data does'nt contain exactly 4 corners by plot")
expect_error(divide_plot(corner_data, c("x_rel","y_rel"), grid_size = 25, tree_data = matrix()),"tree_data must be a data frame or a data frame extension")
expect_error(divide_plot(corner_data, c("x_rel","y_rel"), grid_size = 25, tree_data = NouraguesTrees), "You must provide the column names of the relative coordinates of the trees using the tree_coords argument")
expect_error(divide_plot(corner_data, c("x_rel","y_rel"), grid_size = 25, tree_data = NouraguesTrees, tree_coords = c("x_rel","y_rel")), "column names provided by tree_coords are not found in tree_data colunm names")
expect_error(divide_plot(NouraguesCoords, c("Xfield","Yfield"), grid_size = 25, corner_plot_ID = "Plot", tree_data = NouraguesTrees, tree_coords = c("Xfield","Yfield")),
"You must provide tree_plot_ID if you have more than one plot in your data")
expect_error(divide_plot(NouraguesPlot201[c(1,11,21,31),], c("Xfield","Yfield"), grid_size = 25, tree_data = NouraguesTrees, tree_coords = c("Xfield","Yfield"), tree_plot_ID = "Plot"),
"The argument corner_plot_ID is required if tree_plot_ID is provided (it means that 'corner_data' contains several plots).", fixed=TRUE)
expect_error(divide_plot(NouraguesCoords, c("Xfield","Yfield"), grid_size = 25, corner_plot_ID = "Plot", tree_data = NouraguesTrees, tree_coords = c("Xfield","Yfield"), tree_plot_ID = "a"),
"is not found in tree_data column names.")
expect_warning(divide_plot(corner_data = corner_data, rel_coord = c("x_rel","y_rel"), grid_size = c(30,25)) , "The x-dimension of the plot is not a multiple of the x-dimension of the grid size")
expect_warning(divide_plot(corner_data, c("x_rel","y_rel"), grid_size = c(25,30)) , "The y-dimension of the plot is not a multiple of the y-dimension of the grid size")
expect_error(suppressWarnings(divide_plot(corner_data, c("x_rel","y_rel"), grid_size = c(40,40))) , "If you still want to divide the plot, please increase the value of the grid_tol argument.")
wrong_NouraguesTrees <- NouraguesTrees ; wrong_NouraguesTrees[1,"Plot"] <- 200
expect_warning(divide_plot(NouraguesCoords, c("Xfield","Yfield"), grid_size = 25, corner_plot_ID = "Plot", tree_data = wrong_NouraguesTrees, tree_coords = c("Xfield","Yfield"), tree_plot_ID = "Plot"), "(not in a subplot area)")
# when the plot is not a rectangle
rect_plot <- data.frame(x_rel=c(0,100,0,110),y_rel=c(0,0,100,100))
expect_error(divide_plot(rect_plot, c("x_rel","y_rel"), grid_size = 25) , "BIOMASS package can't deal with non-rectangular plot")
# origin argument
expect_error(divide_plot(corner_data, rel_coord = c("x_rel","y_rel"), grid_size = 25, origin = 2) , "If provided, origin must be a numeric vector of length 2")
})
test_that("divide_plot on relative coordinates only", {
# Test when corner_data is a data.table
subplots <- divide_plot(as.data.table(corner_data), rel_coord = c("x_rel","y_rel"), grid_size = 50)
expect_equal(subplots$sub_corner_coord[1:4,] , data.frame(plot_ID=rep("",4), subplot_ID=rep("subplot_0_0",4),x_rel=c(0,50,50,0), y_rel=c(0,0,50,50)))
# Test rectangular division
rect_subplots <- divide_plot(corner_data, rel_coord = c("x_rel","y_rel"), grid_size = c(25,50))
expect_equivalent(rect_subplots$sub_corner_coord[29:32,] , data.frame(plot_ID=rep("",4), subplot_ID=rep("subplot_3_1",4),x_rel=c(75,100,100,75), y_rel=c(50,50,100,100)))
# Test when the origin is not (0;0)
subplots <- divide_plot(NouraguesCoords[13:16,], rel_coord = c("Xfield","Yfield"), grid_size = 50)
expect_equivalent(subplots$sub_corner_coord[13:16,] , data.frame(plot_ID=rep("",4), subplot_ID=rep("subplot_1_1",4),x=c(250,300,300,250), y=c(250,250,300,300)))
# Test multiple plots
multiple_subplots <- divide_plot(NouraguesCoords, rel_coord = c("Xfield","Yfield"), grid_size = 50, corner_plot_ID = "Plot")
expect_equivalent(multiple_subplots$sub_corner_coord[49:64,3:4] , subplots$sub_corner_coord[,3:4])
expect_equivalent(multiple_subplots$sub_corner_coord[61:64,1:2] , data.frame(plot_ID = rep(223,4), subplot_ID = rep("223_1_1",4)))
# Test rectangular plot
subplots <- divide_plot(expand.grid(x = c(0, 100), y = c(0, 50)), rel_coord = c("x","y"), grid_size = c(50,25))
expect_equivalent(subplots$sub_corner_coord[5:8,] , data.frame(plot_ID=rep("",4), subplot_ID=rep("subplot_1_0",4),x=c(50,100,100,50), y=c(0,0,25,25)))
# Test non-adjusted grid
subplots <- suppressWarnings(divide_plot(corner_data, rel_coord = c("x_rel","y_rel"), grid_size = c(45,20), grid_tol = 0.3))
expect_equivalent(subplots$sub_corner_coord[5:8,] , data.frame(plot_ID=rep("",4), subplot_ID=rep("subplot_1_0",4), x_rel=c(45,90,90,45), y_rel=c(0,0,20,20)))
# Test origin
subplots <- suppressWarnings(divide_plot(corner_data, rel_coord = c("x_rel","y_rel"), grid_size = c(45,20), grid_tol = 0.3, origin = c(10,10)))
expect_equivalent(subplots$sub_corner_coord[1:4,] , data.frame(plot_ID=rep("",4), subplot_ID=rep("subplot_0_0",4), x_rel=c(10,55,55,10), y_rel=c(10,10,30,30)))
})
test_that("divide_plot with projected coordinates", {
subplots <- divide_plot(corner_data, rel_coord = c("x_rel","y_rel"), proj_coord = c("x_proj","y_proj"), grid_size = 50)
#ggplot(subplots,aes(x=x_proj,y=y_proj,label=subplot_ID)) + geom_point()
expect_equivalent(subplots$sub_corner_coord[13:16,c("subplot_ID","x_proj","y_proj")] ,
data.frame(subplot_ID="subplot_1_1",
x_proj=c(313028.4,313003.6,313050.2,313075.4),
y_proj=c(451650.5,451606.4,451582.6,451624.2)),
tol = 1e-5)
# Test with longlat :
corner_data[c("long","lat")] <- as.data.frame( proj4::project(corner_data[c("x_proj","y_proj")], proj = "+proj=utm +zone=22 +north +ellps=WGS84 +datum=WGS84 +units=m +no_defs", inverse = TRUE) )
subplots_longlat <- divide_plot(corner_data=corner_data, rel_coord=c("x_rel","y_rel"), longlat = c("long","lat"), grid_size = 50)
expect_equal(subplots$sub_corner_coord, subplots_longlat$sub_corner_coord[,1:6])
expect_equal(subplots_longlat$sub_corner_coord[1,7:8] , data.frame(long = -52.68448, lat = 4.08504), tolerance = 1e-06)
# Test when both are provided:
expect_message(divide_plot(corner_data=corner_data, rel_coord=c("x_rel","y_rel"), proj_coord = c("x_proj","y_proj"), longlat = c("long","lat"), grid_size = 50), "the 'longlat' argument will be ignored.")
expect_equal(subplots$sub_corner_coord,
suppressMessages(divide_plot(corner_data=corner_data, rel_coord=c("x_rel","y_rel"), proj_coord = c("x_proj","y_proj"), longlat = c("long","lat"), grid_size = 50)$sub_corner_coord))
# Test multiple plots
multiple_subplots <- divide_plot(NouraguesCoords, rel_coord = c("Xfield","Yfield"), proj_coord = c("Xutm","Yutm"), grid_size = 50, corner_plot_ID = "Plot")
#ggplot(multiple_subplots$sub_corner_coord,aes(x=x_proj,y=y_proj,label=subplot_ID)) + geom_point() + geom_text(position = position_jitter()) + coord_equal()
expect_equivalent(multiple_subplots$sub_corner_coord[64,] ,
data.frame(corner_plot_ID=223, subplot_ID="223_1_1", x_rel=250, y_rel=300, x_proj=c(313152.2), y_proj=c(451354.3)), tol=1e-5)
})
test_that("divide_plot with tree coordinates", {
# Test warning when a tree is not in any subplot
expect_warning(divide_plot(corner_data, rel_coord = c("x_rel","y_rel"), grid_size = 50, tree_data = NouraguesTrees[NouraguesTrees$Plot==201,], tree_coords = c("Xfield","Yfield")), "(not in a subplot area)")
subplots <- suppressWarnings(divide_plot(corner_data, rel_coord = c("x_rel","y_rel"), proj_coord = c("x_proj","y_proj"), grid_size = 50, tree_data = NouraguesTrees[NouraguesTrees$Plot==201,], tree_coords = c("Xfield","Yfield")))
expect_equal(subplots$tree_data$subplot_ID[4:6] , c(NA,"subplot_0_0",NA))
subplots_all_trees <- suppressWarnings(divide_plot(corner_data, rel_coord = c("x_rel","y_rel"), proj_coord = c("x_proj","y_proj"), grid_size = 50, tree_data = NouraguesTrees, tree_coords = c("Xfield","Yfield")))
expect_equal(subplots$sub_corner_coord , subplots_all_trees$sub_corner_coord)
expect_equal(subplots$tree_data , subplots_all_trees$tree_data[subplots_all_trees$tree_data$Plot==201,])
# Test with multiple plots
multiple_subplots <- suppressWarnings(
divide_plot(corner_data = NouraguesCoords, rel_coord = c("Xfield","Yfield"), proj_coord = c("Xutm","Yutm"), grid_size = 50,
corner_plot_ID = "Plot", tree_data = NouraguesTrees, tree_coords = c("Xfield","Yfield"), tree_plot_ID = "Plot"))
expect_equal(multiple_subplots$tree_data$subplot_ID[c(100,101)], c("201_0_1","201_0_0"))
})
test_that("divide_plot with coordinates uncertainties", {
multiple_subplots <- suppressWarnings(
divide_plot(corner_data = NouraguesCoords, rel_coord = c("Xfield","Yfield"), proj_coord = c("Xutm","Yutm"), grid_size = 50,
corner_plot_ID = "Plot", tree_data = NouraguesTrees, tree_coords = c("Xfield","Yfield"), tree_plot_ID = "Plot"))
NouraguesTrees <- NouraguesTrees[!is.na(multiple_subplots$tree_data$subplot_ID),]
expect_warning(divide_plot(corner_data = NouraguesCoords, rel_coord = c("Xfield","Yfield"), proj_coord = c("Xutm","Yutm"), grid_size = 50,
corner_plot_ID = "Plot", tree_data = NouraguesTrees, tree_coords = c("Xfield","Yfield"), tree_plot_ID = "Plot",
sd_coord = 0, n = 2), "The value of sd_coord will be used for every plot contained in 'corner_data'.")
expect_error(divide_plot(corner_data = NouraguesCoords, rel_coord = c("Xfield","Yfield"), proj_coord = c("Xutm","Yutm"), grid_size = 50,
corner_plot_ID = "Plot", tree_data = NouraguesTrees, tree_coords = c("Xfield","Yfield"), tree_plot_ID = "Plot",
sd_coord = "toto", n = 2), "sd_coord must be a numeric")
multiple_subplots <- divide_plot(
corner_data = NouraguesCoords, rel_coord = c("Xfield","Yfield"), proj_coord = c("Xutm","Yutm"), grid_size = 50,
corner_plot_ID = "Plot", tree_data = NouraguesTrees, tree_coords = c("Xfield","Yfield"), tree_plot_ID = "Plot")
subplots_sd_0 <- suppressWarnings(divide_plot(
corner_data = NouraguesCoords, rel_coord = c("Xfield","Yfield"), proj_coord = c("Xutm","Yutm"), grid_size = 50,
corner_plot_ID = "Plot", tree_data = NouraguesTrees, tree_coords = c("Xfield","Yfield"), tree_plot_ID = "Plot",
sd_coord = 0, n = 5))
expect_equal(length(subplots_sd_0$sub_corner_coord), 6)
expect_equal(multiple_subplots$sub_corner_coord, subplots_sd_0$sub_corner_coord)
sd_coord <- data.frame(plot_id = c(2010,204,213,223), sd_coord = c(NA,2,3,4))
expect_error(suppressWarnings(divide_plot(
corner_data = NouraguesCoords, rel_coord = c("Xfield","Yfield"), proj_coord = c("Xutm","Yutm"), grid_size = 50,
corner_plot_ID = "Plot", tree_data = NouraguesTrees, tree_coords = c("Xfield","Yfield"), tree_plot_ID = "Plot",
sd_coord = sd_coord, n = 2)) , "Column names of sd_coord must be 'plot_ID' and 'sd_coord'")
names(sd_coord)[1] <- "plot_ID"
expect_error(suppressWarnings(divide_plot(
corner_data = NouraguesCoords, rel_coord = c("Xfield","Yfield"), proj_coord = c("Xutm","Yutm"), grid_size = 50,
corner_plot_ID = "Plot", tree_data = NouraguesTrees, tree_coords = c("Xfield","Yfield"), tree_plot_ID = "Plot",
sd_coord = sd_coord, n = 2)) , "Plot IDs in corner_data and sd_coord don't match.")
sd_coord$plot_ID[1] <- 201
expect_error(suppressWarnings(divide_plot(
corner_data = NouraguesCoords, rel_coord = c("Xfield","Yfield"), proj_coord = c("Xutm","Yutm"), grid_size = 50,
corner_plot_ID = "Plot", tree_data = NouraguesTrees, tree_coords = c("Xfield","Yfield"), tree_plot_ID = "Plot",
sd_coord = sd_coord, n = 50)) , "sd_coord must not contain NA value.")
sd_coord$sd_coord[1] <- 1
set.seed(0)
subplots_sd <- suppressWarnings(divide_plot(
corner_data = NouraguesCoords, rel_coord = c("Xfield","Yfield"), proj_coord = c("Xutm","Yutm"), grid_size = 50,
corner_plot_ID = "Plot", tree_data = NouraguesTrees, tree_coords = c("Xfield","Yfield"), tree_plot_ID = "Plot",
sd_coord = sd_coord, n = 50))
corner_coord <- do.call(rbind,subplots_sd$simu_coord)
corner_coord <- corner_coord[x_rel==0&y_rel==0 | x_rel==100&y_rel==0 | x_rel==0&y_rel==100| x_rel==100&y_rel==100 |
x_rel==0&y_rel==300 | x_rel==100&y_rel==300 | x_rel==0&y_rel==400| x_rel==100&y_rel==400 |
x_rel==100&y_rel==200 | x_rel==200&y_rel==200 | x_rel==100&y_rel==300| x_rel==200&y_rel==300 |
x_rel==200&y_rel==200 | x_rel==300&y_rel==200 | x_rel==200&y_rel==300| x_rel==300&y_rel==300 ,
c("sd_coord_x","sd_coord_y") := list(sd(x_proj, na.rm=TRUE), sd(y_proj, na.rm=TRUE)) , by = c("x_rel","y_rel","subplot_ID") ]
corner_coord <- corner_coord[!is.na(sd_coord_x)]
corner_coord <- reshape(corner_coord, dir = "long", varying = c("sd_coord_x","sd_coord_y"),
v.names = "sd_coord", timevar = NULL, ids = NULL)
expected_sd_coord <- unique(corner_coord[ , sd_coord := mean(sd_coord) , by = plot_ID ][,sd_coord])
expect_equal(expected_sd_coord, sd_coord$sd_coord, tolerance = 0.2)
})
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.