Skip to content

Commit

Permalink
Preserve order of dimnames.
Browse files Browse the repository at this point in the history
Closes #19
  • Loading branch information
hadley committed Apr 22, 2014
1 parent f46a2a7 commit d4369cf
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 1 deletion.
3 changes: 3 additions & 0 deletions NEWS.md
@@ -1,5 +1,8 @@
# Version 1.3.0.99

* `melt.array()` creates factor variables with levels in the same order
as the original rownames (#19)

* `recast()` now returns a data frame instead of a list (#45).

* `melt.data.frame()` gains a `factorsAsStrings` argument (`TRUE` by default)
Expand Down
9 changes: 8 additions & 1 deletion R/melt.r
Expand Up @@ -170,7 +170,14 @@ melt.data.frame <- function(data, id.vars, measure.vars, variable.name = "variab
#' melt(a)
melt.array <- function(data, varnames = names(dimnames(data)), ...,
na.rm = FALSE, as.is = FALSE, value.name = "value") {
var.convert <- function(x) if(is.character(x)) type.convert(x) else x
var.convert <- function(x) {
if (!is.character(x)) return(x)

x <- type.convert(x, as.is = TRUE)
if (!is.character(x)) return(x)

factor(x, levels = unique(x))
}

dn <- amv_dimnames(data)
names(dn) <- varnames
Expand Down
12 changes: 12 additions & 0 deletions inst/tests/test-melt.r
Expand Up @@ -89,6 +89,18 @@ test_that("dimnames are preserved with arrays and tables", {
expect_equal(levels(bm$Z), c("A", "B"))
})

test_that("dimnames kept in original order", {
x <- matrix(1:4, nrow = 2)
rownames(x) <- c("b", "a")
colnames(x) <- c("e", "d")
names(dimnames(x)) <- c("x", "y")

m <- melt(x)
expect_equal(levels(m$x), c("b", "a"))
expect_equal(levels(m$y), c("e", "d"))

})

test_that("as.is = TRUE suppresses dimnname conversion", {
x <- matrix(nrow = 2, ncol = 2)
dimnames(x) <- list(x = 1:2, y = 3:4)
Expand Down

0 comments on commit d4369cf

Please sign in to comment.