I get the sentiment, but this is really just bad coding (on my own part, I suspect), so we might as well just fix it...
-pd > On 21 Nov 2020, at 17:42 , Marc Schwartz via R-devel <r-devel@r-project.org> > wrote: > > >> On Nov 21, 2020, at 10:55 AM, Mario Annau <mario.an...@gmail.com> wrote: >> >> Hello, >> >> using the `unsplit()` function with tibbles currently leads to the >> following error: >> >>> mtcars_tb <- as_tibble(mtcars, rownames = NULL) >>> s <- split(mtcars_tb, mtcars_tb$gear) >>> unsplit(s, mtcars_tb$gear) >> Error: Must subset rows with a valid subscript vector. >> ℹ Logical subscripts must match the size of the indexed input. >> x Input has size 15 but subscript `rep(NA, len)` has size 32. >> Run `rlang::last_error()` to see where the error occurred. >> >> Tibble seems to (rightly) complain, that a logical vector has been used for >> subsetting which does not have the same length as the data.frame (rows). >> Since `NA` is a logical value, the subset should be changed to >> `NA_integer_` in `unsplit()`: >> >>> unsplit >> function (value, f, drop = FALSE) >> { >> len <- length(if (is.list(f)) f[[1L]] else f) >> if (is.data.frame(value[[1L]])) { >> x <- value[[1L]][rep(*NA_integer_*, len), , drop = FALSE] >> rownames(x) <- unsplit(lapply(value, rownames), f, drop = drop) >> } >> else x <- value[[1L]][rep(NA, len)] >> split(x, f, drop = drop) <- value >> x >> } >> >> Cheers, >> Mario > > > Hi, > > Perhaps I am missing something, but if you are using objects, like tibbles, > that are intended to be part of another environment, in this case the > tidyverse, why would you not use functions to manipulate these objects that > were specifically created in the other environment? > > I don't use the tidyverse, but it seems to me that to expect base R functions > to work with objects not created in base R, is problematic, even though, > perhaps by coincidence, they may work without adverse effects, as appears to > be the case with split(). > > In other words, you should not, in reality, have had an a priori expectation > that split() would work with a tibble either. > > Rather than modifying the base R functions, like unsplit(), as you are > suggesting, to be compatible with these third party objects, the burden > should either be on you to use relevant tidyverse functions, or on the > authors of the tidyverse to provide relevant class methods to provide that > functionality. > > Regards, > > Marc Schwartz > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd....@cbs.dk Priv: pda...@gmail.com ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel