Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

remove Rcpp dependency #313

Merged
merged 7 commits into from Oct 4, 2017
Merged

remove Rcpp dependency #313

merged 7 commits into from Oct 4, 2017

Conversation

@patperry
Copy link
Contributor

@patperry patperry commented Sep 29, 2017

Doing my part to remove C++ from the world. Closes #226.

@patperry
Copy link
Contributor Author

@patperry patperry commented Sep 29, 2017

sorry about the failing tests. I'll look into those next week

@patperry
Copy link
Contributor Author

@patperry patperry commented Sep 29, 2017

These tests fail on the upstream master, too, I don't think they are anything to do with my code:

> devtools::test(".", "matrix")
Loading tibble
Loading required package: testthat
Testing tibble
matrix: ...............

DONE ===========================================================================
Copy link
Member

@krlmlr krlmlr left a comment

Thanks a lot for taking the time to convert the C++ code.

//
// but there's no need to get fancy since log10(2^64) = 19.266
ndigit = 20;
buf = R_alloc(1 + ndigit + 1, 1); // V + (number) + NUL

This comment has been minimized.

@krlmlr

krlmlr Oct 4, 2017
Member

Maybe just char buf[1 + ndigit + 1]?

if (TYPEOF(dimnames) == VECSXP && XLENGTH(dimnames) == 2) {
colnames = VECTOR_ELT(dimnames, 1);
if (TYPEOF(colnames) == STRSXP) {
goto Return;

This comment has been minimized.

@krlmlr

krlmlr Oct 4, 2017
Member

I'd prefer a solution without goto here. Maybe a separate function get_colnames_from_dimnames() with early return?


// use the cached value of the type rather than re-computing
// (this might be an unnecessary optimization)
assert(TYPEOF(x) == type);

This comment has been minimized.

@krlmlr

krlmlr Oct 4, 2017
Member

Extracting the type from x seems cleaner to me, too.


static SEXP get_class(void)
{
SEXP cls;

This comment has been minimized.

@krlmlr

krlmlr Oct 4, 2017
Member

Please check indent.

SEXP dimnames, rownames;
int nprot = 0;

#ifndef TIBBLE_DROP_ROWNAMES

This comment has been minimized.

@krlmlr

krlmlr Oct 4, 2017
Member

I'm fine with keeping existing row names here. Could you please add a test?

This comment has been minimized.

@krlmlr

krlmlr Oct 4, 2017
Member

Actually, no: let's keep row names out: #288 (comment). Happy to support a rownames argument in as_tibble.matrix(), which then could be extended to as_tibble.data.frame(). (The concept of keys I brought up in the linked reference is orthogonal, we need to store the data in a column anyway, with or without keys.)

This comment has been minimized.

@patperry

patperry Oct 4, 2017
Author Contributor

I left them in, but feel free to edit. It seems cleaner to me to handle all the row names logic in just one function. Just do

as_tibble.matrix <- function(x, ...) {
    as_tibble(matrixToDataFrame(x), ...)
}
R_xlen_t nrow = 0, ncol = 0;
int nprot = 0;

PROTECT(dim = getAttrib(x, R_DimSymbol)); nprot++;

This comment has been minimized.

@krlmlr

krlmlr Oct 4, 2017
Member

Can we use Rf_getAttrib() instead of getAttrib() here, to make the use of the R API more obvious? Also for the other functions? Please define R_NO_REMAP to turn off availability of functions without Rf_ prefix.

if (TYPEOF(dimnames) == VECSXP && XLENGTH(dimnames) == 2) {
rownames = VECTOR_ELT(dimnames, 0);
if (TYPEOF(rownames) == STRSXP) {
goto Return;

This comment has been minimized.

@krlmlr

krlmlr Oct 4, 2017
Member

goto again.

@krlmlr krlmlr merged commit 7c9ce6d into tidyverse:master Oct 4, 2017
1 of 2 checks passed
1 of 2 checks passed
continuous-integration/travis-ci/pr The Travis CI build failed
Details
continuous-integration/appveyor/pr AppVeyor build succeeded
Details
@krlmlr
Copy link
Member

@krlmlr krlmlr commented Oct 4, 2017

Thanks!

krlmlr added a commit that referenced this pull request Nov 3, 2017
- In `glimpse()`, compute `type_sum()` from data frame for dbplyr compatibility (#328).
- `as_tibble.matrix()` repairs column names.
- Compatible with R 3.1 (#323).
- Make add_case() and alias for add_row() (#324, @LaDilettante).
- `add_column()` to an empty zero-row tibble with a variable of nonzero length now produces a correct error message (#319).
- Logical indexes are supported, a warning is raised if the length does not match the number of rows or 1 (#318).
- Tibbles now support character subsetting (#312).
- `as_tibble()` gains `rownames` argument (#288, #289).
- Remove Rcpp dependency (#313, @patperry).
- ``` `[.tbl_df`() ``` supports `drop = TRUE` and omits the warning if `j` is passed. The calls `df[i, j, drop = TRUE]` and `df[i, drop = TRUE]` are now compatible with data frames again (#307, #311).
- Prevent `add_column()` from dropping classes and attributes by removing the use of `cbind()`. Additionally this ensures that `add_column()` can be used with grouped data frames (#303, @DavisVaughan).
- Fixed width for word wrapping of the extra information (#301).
krlmlr added a commit that referenced this pull request Dec 28, 2017
New formatting
--------------

The new pillar package is now responsible for formatting tibbles. Pillar will try to display as many columns as possible, if necessary truncating or shortening the output. Colored output highlights important information and guides the eye. The vignette in the tibble package describes how to adapt custom data types for optimal display in a tibble.

New features
------------

- Make `add_case()` an alias for `add_row()` (#324, @LaDilettante).
- `as_tibble()` gains `rownames` argument (#288, #289).
- `as_tibble.matrix()` repairs column names.
- Tibbles now support character subsetting (#312).
- ``` `[.tbl_df`() ``` supports `drop = TRUE` and omits the warning if `j` is passed. The calls `df[i, j, drop = TRUE]` and `df[i, drop = TRUE]` are now compatible with data frames again (#307, #311).

Bug fixes
---------

- Improved compatibility with remote data sources for `glimpse()` (#328).
- Logical indexes are supported, a warning is raised if the length does not match the number of rows or 1 (#318).
- Fixed width for word wrapping of the extra information (#301).
- Prevent `add_column()` from dropping classes and attributes by removing the use of `cbind()`. Additionally this ensures that `add_column()` can be used with grouped data frames (#303, @DavisVaughan).
- `add_column()` to an empty zero-row tibble with a variable of nonzero length now produces a correct error message (#319).

Internal changes
----------------

- Reexporting `has_name()` from rlang, instead of forwarding, to avoid warning when importing both rlang and tibble.
- Compatible with R 3.1 (#323).
- Remove Rcpp dependency (#313, @patperry).
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Dec 9, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

2 participants