Skip to content

Commit e455714

Browse files
authored
as.data.table.array: copy shared dimnames before reversing them (#7509)
* regression test * copy shared values before overwriting
1 parent 931e8e2 commit e455714

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

R/as.data.table.R

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,9 @@ as.data.table.array = function(x, keep.rownames=FALSE, key=NULL, sorted=TRUE, va
102102
lapply(dx, seq_len)
103103
} else if (any(nulldnx <- vapply_1b(dnx, is.null))) {
104104
dnx[nulldnx] = lapply(dx[nulldnx], seq_len) #3636
105+
setattr(dnx, 'names', copy(names(dnx)))
105106
dnx
106-
} else dnx
107+
} else copy(dnx)
107108
setfrev(val)
108109
if (is.null(names(val)) || !any(nzchar(names(val))))
109110
setattr(val, 'names', paste0("V", frev(seq_along(val))))

inst/tests/tests.Rraw

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21927,3 +21927,14 @@ rm(DTn, DTl, DT)
2192721927
DT = unserialize(serialize(as.data.table(mtcars), NULL))
2192821928
test(2353, DT[,foo:=mean(mpg),by=cyl], as.data.table(mtcars)[,foo:=mean(mpg),by=cyl])
2192921929
rm(DT)
21930+
21931+
# as.data.table.array(x) shouldn't overwrite dimnames(x), #7506
21932+
Xdn = list(foo = letters[1:2], bar = LETTERS[1:3], baz = as.character(1:4))
21933+
X = array(1:24, 2:4, copy(Xdn))
21934+
DT = as.data.table(X)
21935+
test(2354.1, dimnames(X), Xdn)
21936+
Xdn['baz'] = list(NULL)
21937+
dimnames(X) = copy(Xdn)
21938+
DT = as.data.table(X)
21939+
test(2354.2, dimnames(X), Xdn)
21940+
rm(X, Xdn, DT)

0 commit comments

Comments
 (0)