Hi all, I believe that the internal row names object created at this line in `row_names_gets()` should be using `-n`, not `n`. https://github.com/wch/r-source/blob/b30641d3f58703bbeafee101f983b6b263b7f27d/src/main/attrib.c#L71
This can currently generate corrupt internal row names when using `attributes<-` or `structure()`, which calls `attributes<-`. # internal row names are typically `c(NA, -n)` df <- data.frame(x = 1:3) .row_names_info(df, type = 0L) #> [1] NA -3 # using `attributes()` materializes their non-internal form attrs <- attributes(df) attrs #> $names #> [1] "x" #> #> $class #> [1] "data.frame" #> #> $row.names #> [1] 1 2 3 # let's make a data frame from scratch with `attributes<-` data <- list(x = 1:3) attributes(data) <- attrs # oh no! .row_names_info(data, type = 0L) #> [1] NA 3 # Note: Must have `nrow(df) > 2` to demonstrate this bug, as otherwise # internal row names are not attempted to be created in the C level # `row_names_gets()` Thanks, Davis [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel