Nothing
context("move")
test_that("short move file", {
skip("provides a problem that needs solving")
fileUri <- system.file("extdata", "leroy.csv.gz", package = "move")
fff <- textConnection(readLines(fileUri, n = 10)[c(1:10, 10)])
class(fff) <- "connection"
expect_warning(suppressMessages(data3 <- move(fff,
removeDuplicatedTimestamps =
T
)))
})
test_that("as df", {
data(leroy)
expect_equal(as.data.frame(leroy), as(leroy, "data.frame"))
})
test_that("move", {
expect_error(move())
# expect_error(move(x=1:10, y=1:10, time=as.POSIXct(1:10, origin="1970-1-1"))) #we now allow projection to be NA
expect_silent(data <-
move(
fileUri <- system.file("extdata", "leroy.csv.gz", package = "move")
))
expect_equal(n.indiv(data), 1)
cvs <-
na.omit(read.csv(fileUri)[, c("location.long", "location.lat")])
expect_equivalent(coordinates(data), as.matrix(cvs))
data2 <- move(file(fileUri))
data@dateCreation <- data2@dateCreation
expect_equal(data, data2)
expect_message(
data3 <-
move(file(fileUri), removeDuplicatedTimestamps = T),
"removeDupilcatedTimestamps was set to TRUE, this will retain the first of multiple records with the same animal ID and timestamp, and remove any subsequent duplicates"
)
expect_silent(suppressMessages(data3 <-
move(
file(fileUri),
removeDuplicatedTimestamps = T
)))
data3@dateCreation <- data2@dateCreation
expect_equal(data, data3)
fff <- textConnection(readLines(fileUri, n = 1000)[c(1:1000, 1000)])
class(fff) <- "connection"
expect_warning(suppressMessages(data3 <- move(fff,
removeDuplicatedTimestamps =
T
)))
fileR <- system.file("extdata", "leroy.csv.gz", package = "move")
skip_on_os("windows")
skip_on_cran()
if ((class(p <- pipe("")) != "pipeWin32")[1]) {
if (class(try(move(pipe(paste0(
"zcat ", fileR, " | sed ''"
))))) == "Move") {
dataR <- move(pipe(paste0("zcat ", fileR)))
f <-
c(
"\"\",\"event.id\",\"timestamp\",\"location.long\",\"location.lat\",\"behavioural.classification\",\"eobs.battery.voltage\",\"eobs.fix.battery.voltage\",\"eobs.horizontal.accuracy.estimate\",\"eobs.key.bin.checksum\",\"eobs.speed.accuracy.estimate\",\"eobs.start.timestamp\",\"eobs.status\",\"eobs.temperature\",\"eobs.type.of.fix\",\"eobs.used.time.to.get.fix\",\"ground.speed\",\"heading\",\"height.above.ellipsoid\",\"manually.marked.outlier\",\"visible\",\"sensor.type\",\"individual.taxon.canonical.name\",\"tag.local.identifier\",\"individual.local.identifier\",\"study.name\",\"utm.easting\",\"utm.northing\",\"utm.zone\",\"study.timezone\",\"study.local.timestamp\"",
"\"\",\"event.id\",\"timestamp\",\"location.long\",\"location.lat\",\"behavioural.classification\",\"eobs.battery.voltage\",\"eobs.fix.battery.voltage\",\"eobs.horizontal.accuracy.estimate\",\"eobs.key.bin.checksum\",\"eobs.speed.accuracy.estimate\",\"eobs.start.timestamp\",\"eobs.status\",\"eobs.temperature\",\"eobs.type.of.fix\",\"eobs.used.time.to.get.fix\",\"ground.speed\",\"heading\",\"height.above.ellipsoid\",\"manually.marked.outlier\",\"visible\",\"sensor.type\",\"individual.taxon.canonical.name\",\"tag.local.identifier\",\"individual.local.identifier\",\"study.name\",\"utm.easting\",\"utm.northing\",\"utm.zone\",\"study.timezone\",\"study.local.timestamp\"",
"\"1\",44528397,\"2010-02-09 16:07:21.000\",NA,NA,NA,3686,3468,NA,2210166656,NA,\"2010-02-09 16:05:21.000\",\"D\",27,0,120,NA,NA,NA,\"\",\"true\",\"gps\",\"Martes pennanti\",1016,\"Ricky T\",\"Urban fisher GPS tracking\",NA,NA,\"\",\"Eastern Standard Time\",\"2010-02-09 11:07:21.000\"",
"\"1\",44528397,\"2010-02-09 16:07:21.000\",NA,NA,NA,3686,3468,NA,2210166656,NA,\"2010-02-09 16:05:21.000\",\"D\",27,0,120,NA,NA,NA,\"\",\"true\",\"gps\",\"Martes pennanti\",1016,\"Ricky T\",\"Urban fisher GPS tracking\",NA,NA,\"\",\"Eastern Standard Time\",\"2010-02-09 11:07:21.000\"",
"\"2\",44528398,\"2010-02-09 17:01:23.000\",-73.9042594,42.8418856,NA,3662,3457,13.57,2236237607,1.64,\"2010-02-09 17:00:00.000\",\"A\",3,3,83,0.12,292.95,80.3,\"\",\"true\",\"gps\",\"Martes pennanti\",1016,\"Ricky T\",\"Urban fisher GPS tracking\",589541.097246732,4743838.94122749,\"18N\",\"Eastern Standard Time\",\"2010-02-09 12:01:23.000\"",
"\"2\",44528398,\"2010-02-09 17:01:23.000\",-73.9042594,42.8418856,NA,3662,3457,13.57,2236237607,1.64,\"2010-02-09 17:00:00.000\",\"A\",3,3,83,0.12,292.95,80.3,\"\",\"true\",\"gps\",\"Martes pennanti\",1016,\"Ricky T\",\"Urban fisher GPS tracking\",589541.097246732,4743838.94122749,\"18N\",\"Eastern Standard Time\",\"2010-02-09 12:01:23.000\""
)
ff <- textConnection(f)
class(ff) <- "connection"
expect_error(
expect_warning(
move(ff),
"Exact duplicate records removed (n=2) (movebank allows them but the move package can"
)
) # location is character due to duplicated header
expect_warning(move(pipe(
paste0("zcat ", fileR, "| sed '1!p;'")
)), "Exact duplicate records removed")
dataR2 <-
suppressWarnings(move(pipe(
paste0("zcat ", fileR, "| sed '1!p;'")
)))
dataR@dateCreation <- dataR2@dateCreation
rownames(dataR@data) <- as.character(rownames(dataR2@data))
rownames(dataR2@data) <- as.character(rownames(dataR2@data))
rownames(dataR@dataUnUsedRecords) <-
as.character(rownames(dataR2@dataUnUsedRecords))
rownames(dataR2@dataUnUsedRecords) <-
as.character(rownames(dataR2@dataUnUsedRecords))
rownames(dataR2@coords) <- rownames(dataR@coords)
expect_equal(dataR, dataR2)
expect_error(dataR3 <-
(move(pipe(
paste0("zcat ", fileR, "| sed '48p; 48s/Martes/Maggg/'")
))))
expect_error(move(pipe(
paste0("zcat ", fileR, "| sed '48p; 48s/\"A\"/\"B\"/'")
), removeDuplicatedTimestamps = F))
expect_error(move(pipe(
paste0("zcat ", fileR, "| sed '56p; 56s/8986618/8886618/'")
), removeDuplicatedTimestamps = F))
expect_equal(n.locs(move(
pipe(paste0(
"zcat ", fileR, "| sed '55p; 55s/49.001/49.002/'"
)),
removeDuplicatedTimestamps = F
)), n.locs(dataR2) + 1)
expect_warning(
suppressMessages(dataR3 <-
move(
pipe(paste0(
"zcat ", fileR, "| sed '53p; 53s/10.49/10.48/'"
)),
removeDuplicatedTimestamps = T
)),
". location.s. is/are removed by removeDuplicatedTimestamps"
)
dataR@dateCreation <- dataR3@dateCreation
rownames(dataR@data) <- as.character(rownames(dataR3@data))
rownames(dataR3@data) <- as.character(rownames(dataR3@data))
rownames(dataR@dataUnUsedRecords) <-
as.character(rownames(dataR3@dataUnUsedRecords))
rownames(dataR3@dataUnUsedRecords) <-
as.character(rownames(dataR3@dataUnUsedRecords))
rownames(dataR3@coords) <- rownames(dataR@coords)
expect_equal(dataR, dataR3)
}
}
close(p)
expect_is(move(1:2, 1:2, Sys.time() + 1:2, animal = c("b", "a")), "MoveStack")
expect_is(move(1:2, 1:2, Sys.time() + 1:2, animal = c(2:1)), "MoveStack")
tt <- Sys.time() + 1:2
expect_equal(
m2 <- move(1:2, 1:2, tt, proj = "+proj=longlat +datum=WGS84"),
move(1:2, 1:2, tt, proj = CRS("+proj=longlat +datum=WGS84"))
)
expect_equal(
m1 <- move(1:2, 1:2, tt),
move(1:2, 1:2, tt, proj = CRS())
)
skip_on_cran()
expect_silent(proj4string(m1) <- "+proj=longlat +datum=WGS84")
expect_equal(m1, m2)
expect_equal(
move(1:2, 1:2, tt, data = data.frame(3:4), proj = "+proj=longlat +datum=WGS84"),
move(
1:2,
1:2,
tt,
data = data.frame(3:4),
proj = CRS("+proj=longlat +datum=WGS84")
)
)
})
test_that("minimal move file", {
f <- c(
"\"timestamp\",\"location.long\",\"location.lat\",\"sensor.type\",\"individual.taxon.canonical.name\",\"tag.local.identifier\",\"individual.local.identifier\"",
"\"2010-02-09 16:07:21.000\",NA,NA,\"gps\",\"Martes pennanti\",1016,\"Ricky T\"",
"\"2010-02-09 17:01:23.000\",-73.9042594,42.8418856,\"gps\",\"Martes pennanti\",1016,\"Ricky T\""
)
ff <- textConnection(f)
class(ff) <- "connection"
m <- move(ff)
expect_s4_class(m, class = "Move")
f <- c(
"\"timestamp\",\"location.lat\",\"sensor.type\",\"individual.taxon.canonical.name\",\"tag.local.identifier\",\"individual.local.identifier\"",
"\"2010-02-09 16:07:21.000\",NA,\"gps\",\"Martes pennanti\",1016,\"Ricky T\"",
"\"2010-02-09 17:01:23.000\",42.8418856,\"gps\",\"Martes pennanti\",1016,\"Ricky T\""
)
ff <- textConnection(f)
class(ff) <- "connection"
expect_error(move(ff), "does not seem to be from Movebank")
f <-
c(
"\"timestamp\",\"location.long\",\"location.lat\",\"sensor.type\",\"individual.taxon.canonical.name\",\"tag.local.identifier\",\"individual.local.identifier\"",
"\"2010-02-09 16:07:21.000\",4,4,\"gps\",\"Martes pennanti\",1016,\"Ricky A\"",
"\"2010-02-09 17:01:23.000\",-73.9042594,42.8418856,\"gps\",\"Martes pennanti\",1016,\"Ricky T\""
)
ff <- textConnection(f)
class(ff) <- "connection"
m <- move(ff)
expect_s4_class(m, class = "MoveStack")
expect_identical(sensor(m), factor(c("gps", "gps")))
expect_warning(m <- move(c(NA, NA, 1:2), c(0:3), Sys.time() + 0:3), "There were NA locations detected and omitted. Currently they are not stored in unusedrecords")
expect_identical(levels(sensor(m)), levels(sensor(unUsedRecords(m))))
f <-
c(
"\"timestamp\",\"location.long\",\"location.lat\",\"sensor.type\",\"individual.taxon.canonical.name\",\"tag.local.identifier\",\"individual.local.identifier\"",
"\"2010-02-09 16:07:21.000\",,4,\"gps\",\"Martes pennanti\",1016,\"Ricky T\"",
"\"2010-02-09 17:01:23.000\",-73.9042594,42.8418856,\"gps\",\"Martes pennanti\",1016,\"Ricky T\""
)
ff <- textConnection(f)
class(ff) <- "connection"
m <- move(ff)
expect_identical((sensor(m)), (sensor(unUsedRecords(m))))
})
test_that("failure to set trackId", {
v <- c(
"event.id,visible,timestamp,location.long,location.lat,comments,modelled,study.specific.measurement,tag.tech.spec,sensor.type,individual.taxon.canonical.name,tag.local.identifier,individual.local.identifier,study.name",
'53434,true,2011-12-15 00:21:57.000,1,2,sdfg,true,111,1,gps,T,7GPS,7,"a"',
'2345234,true,2011-12-15 01:22:57.000,3,4,dfg,true,111,1,gps,T,7GPS,7,"a"',
'12345320,true,2011-12-15 02:52:57.000,0,5,dfg,true,111,1,gps,T,7GPS,7,"a"',
'1234320,true,2011-12-15 01:52:57.000,0,5,dfg,true,111,1,gps,T,8GPS,8,"a"',
'1235320,true,2011-12-15 02:52:57.000,0,5,dfg,true,111,1,gps,T,8GPS,8,"a"',
'145320,true,2011-12-15 02:52:57.000,1,5,dfg,true,111,1,gps,T,8GPS,8,"a"'
)
ff <- textConnection(v)
class(ff) <- "connection"
expect_warning(
d <- move(ff, removeDuplicatedTimestamps = T),
"removed by removeDuplicatedTimestamps"
)
expect_s4_class(d, "MoveStack")
})
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.