From 8357fa839e9b56458e79a5e5937f77fc384bd8d3 Mon Sep 17 00:00:00 2001 From: Federico Massetti Date: Tue, 28 Aug 2018 20:21:23 +0200 Subject: [PATCH 1/4] Update aggregate_spectra.R I tried to address the problems presented by aggregate_spectra in handling multiple columns in the data of the SpectralDataFrame objects. With this modification, as soon as all the non-numeric columns are listed as "id", everything runs smoothly (tested for mean and median on the australia dataset and on my own dataset). The only problem is that the following message is given. But the output has always been alright so far. Warning message: In if (id %in% names(features(obj))) { : the condition has length > 1 and only the first element will be used This would be worth double checking since this is the first try I try programming in R! --- R/aggregate_spectra.R | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/R/aggregate_spectra.R b/R/aggregate_spectra.R index f28a9a4..f0cb974 100644 --- a/R/aggregate_spectra.R +++ b/R/aggregate_spectra.R @@ -95,23 +95,30 @@ setMethod("aggregate_spectra", "SpectraDataFrame", res <- SpectraDataFrame(res, data = data.frame(matrix(data, nrow = 1, dimnames = list(id, names(obj))))) } - + # There is a variable against which the data will be aggregated else { - if (id %in% names(features(obj))) { - + if (id %in% names(features(obj))) { + # Col index of the splitting variable - idx <- which(names(features(obj)) == id) - + idx <- paste("(names(features(obj)) == '", id, "')", sep = "") + idx <- paste(idx, collapse="|") + idx <- which(eval(parse(text=idx))) + # Creating spectra splits s <- data.frame(id = features(obj)[, idx, drop = FALSE], spectra(obj)) - - s <- ddply(s, id, colwise(fun), ...) + colnames(s) <- gsub("id.", "", colnames(s)) + s <- na.omit(ddply(s, id, colwise(fun), ...)) + # Remove id used to split data.frame - s <- s[, -1] - + s <- s[, -(1:(length(id)))] + # new data slot - d <- ddply(features(obj), id, colwise(fun, ...)) + feat <- merge((features(obj)[, as.vector(id)]), (select_if(features(obj), is.numeric)), by="row.names") + rownames(feat) <- feat[,1] + feat <- feat[,-1] + d <- ddply(feat, id, colwise(fun), .drop=TRUE, ...) + d <- na.omit(d[colSums(!is.na(d)) > 0]) # recompose the object res <- SpectraDataFrame(wl = wl(obj), nir = s, units = wl_units(obj), data = d) @@ -122,4 +129,4 @@ setMethod("aggregate_spectra", "SpectraDataFrame", res } -) \ No newline at end of file +) From 8800f1bd3c82f942fdfd3a30f51d44b3618272f9 Mon Sep 17 00:00:00 2001 From: Federico Massetti Date: Wed, 29 Aug 2018 15:38:04 +0200 Subject: [PATCH 2/4] Update aggregate_spectra.R --- R/aggregate_spectra.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/aggregate_spectra.R b/R/aggregate_spectra.R index f0cb974..2e31c77 100644 --- a/R/aggregate_spectra.R +++ b/R/aggregate_spectra.R @@ -114,7 +114,7 @@ setMethod("aggregate_spectra", "SpectraDataFrame", s <- s[, -(1:(length(id)))] # new data slot - feat <- merge((features(obj)[, as.vector(id)]), (select_if(features(obj), is.numeric)), by="row.names") + feat <- merge(select(features(obj), as.vector(id)), (select_if(features(obj), is.numeric)), by="row.names", suffixes = "") rownames(feat) <- feat[,1] feat <- feat[,-1] d <- ddply(feat, id, colwise(fun), .drop=TRUE, ...) From dac522c99653d93110bbbb75bf3dc7e2e98d6245 Mon Sep 17 00:00:00 2001 From: Federico Massetti Date: Wed, 29 Aug 2018 16:15:04 +0200 Subject: [PATCH 3/4] Update aggregate_spectra.R --- R/aggregate_spectra.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/aggregate_spectra.R b/R/aggregate_spectra.R index 2e31c77..fccaf1c 100644 --- a/R/aggregate_spectra.R +++ b/R/aggregate_spectra.R @@ -114,7 +114,7 @@ setMethod("aggregate_spectra", "SpectraDataFrame", s <- s[, -(1:(length(id)))] # new data slot - feat <- merge(select(features(obj), as.vector(id)), (select_if(features(obj), is.numeric)), by="row.names", suffixes = "") + feat <- merge(subset(features(obj), select=c(id)), (select_if(features(obj), is.numeric)), by="row.names", suffixes = "") rownames(feat) <- feat[,1] feat <- feat[,-1] d <- ddply(feat, id, colwise(fun), .drop=TRUE, ...) From 453a04c810d12961987404f1497a20f2bd9def7f Mon Sep 17 00:00:00 2001 From: Federico Massetti Date: Wed, 29 Aug 2018 17:07:47 +0200 Subject: [PATCH 4/4] Update aggregate_spectra.R Replaced some elements that were dependent from dplyr. --- R/aggregate_spectra.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/aggregate_spectra.R b/R/aggregate_spectra.R index fccaf1c..1e81f30 100644 --- a/R/aggregate_spectra.R +++ b/R/aggregate_spectra.R @@ -114,7 +114,7 @@ setMethod("aggregate_spectra", "SpectraDataFrame", s <- s[, -(1:(length(id)))] # new data slot - feat <- merge(subset(features(obj), select=c(id)), (select_if(features(obj), is.numeric)), by="row.names", suffixes = "") + feat <- merge(subset(features(obj), select=c(id)), Filter(is.numeric, features(obj)), by="row.names", suffixes = "") rownames(feat) <- feat[,1] feat <- feat[,-1] d <- ddply(feat, id, colwise(fun), .drop=TRUE, ...)