From 44bbe1743558f6e42021c4276283ee734cde7c22 Mon Sep 17 00:00:00 2001 From: JulioV Date: Wed, 13 Nov 2019 14:54:24 -0500 Subject: [PATCH] Update location_barnett_metrics.R to handle empty dataframes and location sequences without flights --- src/features/location_barnett_metrics.R | 40 ++++++++++++++++++++----- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/src/features/location_barnett_metrics.R b/src/features/location_barnett_metrics.R index d8aae256..89e18bf3 100644 --- a/src/features/location_barnett_metrics.R +++ b/src/features/location_barnett_metrics.R @@ -2,6 +2,26 @@ source("packrat/init.R") library(dplyr) +write_empty_file <- function(file_path){ + write.csv(data.frame(local_date= character(), + hometime= numeric(), + disttravelled= numeric(), + rog= numeric(), + maxdiam= numeric(), + maxhomedist= numeric(), + siglocsvisited= numeric(), + avgflightlen= numeric(), + stdflightlen= numeric(), + avgflightdur= numeric(), + stdflightdur= numeric(), + probpause= numeric(), + siglocentropy= numeric(), + minsmissing= numeric(), + circdnrtn= numeric(), + wkenddayrtn= numeric() + ), file_path, row.names = F) +} + # Load Ian Barnett's code. Taken from https://scholar.harvard.edu/ibarnett/software/gpsmobility file.sources = list.files(c("src/features/location_barnett"), pattern="*.R$", full.names=TRUE, ignore.case=TRUE) sapply(file.sources,source,.GlobalEnv) @@ -12,13 +32,19 @@ timezone <- snakemake@params[["timezone"]] location <- read.csv(snakemake@input[[1]], stringsAsFactors = F) %>% select(timestamp, latitude = double_latitude, longitude = double_longitude, altitude = double_altitude, accuracy) -if (nrow(location) > 0){ +if (nrow(location) > 1){ features <- MobilityFeatures(location, ACCURACY_LIM = accuracy_limit, tz = timezone) - - # Copy index (dates) as a column - outmatrix = cbind(rownames(features$featavg), features$featavg) - colnames(outmatrix)=c("local_date",tolower(colnames(features$featavg))) - write.csv(outmatrix,snakemake@output[[1]], row.names = F) + if(is.null(features)){ + write_empty_file(snakemake@output[[1]]) + } else{ + # Copy index (dates) as a column + outmatrix <- cbind(rownames(features$featavg), features$featavg) + outmatrix <- as.data.frame(outmatrix) + outmatrix[-1] <- lapply(lapply(outmatrix[-1], as.character), as.numeric) + colnames(outmatrix)=c("local_date",tolower(colnames(features$featavg))) + write.csv(outmatrix,snakemake@output[[1]], row.names = F) + } + } else { - write.csv(data.frame(),snakemake@output[[1]]) + write_empty_file(snakemake@output[[1]]) } \ No newline at end of file