Skip to content

GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame - #35173

Merged
thisisnic merged 19 commits into
apache:mainfrom
thisisnic:GH-34775_new_as_df
May 3, 2023
Merged

GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame#35173
thisisnic merged 19 commits into
apache:mainfrom
thisisnic:GH-34775_new_as_df

Conversation

@thisisnic

@thisisnicthisisnic commented Apr 17, 2023

Copy link
Copy Markdown
Member

Features of this PR:

  • Ensures that calling as.data.frame() on Arrow objects returns base R data.frame objects.

  • Drops the class attribute metadata of input objects of data.frame class (i.e. that don't have inherit from any additional classes other than data.frame). This results in us sacrificing roundtrip class fidelity for data.frame objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that as.data.frame() returns a base R data.frame. Users who wish to input and return a data.frame object can call as.data.frame() on the returned object.

  • Implements dplyr::collect() for StructArrays so that these objects can still be returned as tibbles if needed.

  • Renames expect_data_frame() to expect_equal_data_frame() for clarity, and updates it to convert both the object and expected object to data.frames.

  • Closes: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame #34775

@github-actions

Copy link
Copy Markdown

@thisisnic
thisisnic marked this pull request as ready for review April 25, 2023 12:54

@paleolimbotpaleolimbot left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good! It seems like a cleaner solution than what we currently have. I like the idea of dropping metadata on the way in where possible because I seem to remember that we can skip some calls from C++ into R if there is no metadata to restore which speeds things up a bit.

@github-actionsgithub-actionsBot added awaiting merge Awaiting merge and removed awaiting committer review Awaiting committer review labels May 3, 2023
@thisisnic
thisisnic merged commit 205ceb9 into apache:mainMay 3, 2023
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 2ee0345 and contender = 205ceb9. 205ceb9 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.27% ⬆️0.06%] test-mac-arm
[Finished ⬇️3.32% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.66% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 205ceb99 ec2-t3-xlarge-us-east-2
[Finished] 205ceb99 test-mac-arm
[Finished] 205ceb99 ursa-i9-9960x
[Finished] 205ceb99 ursa-thinkcentre-m75q
[Finished] 2ee03450 ec2-t3-xlarge-us-east-2
[Finished] 2ee03450 test-mac-arm
[Finished] 2ee03450 ursa-i9-9960x
[Finished] 2ee03450 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
test-mac-arm

liujiacheng777 pushed a commit to LoongArch-Python/arrow that referenced this pull request May 11, 2023
…tbl and sometimes a data.frame (apache#35173)
Features of this PR:
* Ensures that calling `as.data.frame()` on Arrow objects returns base R `data.frame` objects.
* Drops the `class` attribute metadata of input objects of `data.frame` class (i.e. that don't have inherit from any additional classes other than `data.frame`). This results in us sacrificing roundtrip class fidelity for `data.frame` objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that `as.data.frame()` returns a base R data.frame. Users who wish to input and return a `data.frame` object can call `as.data.frame()` on the returned object.
* Implements `dplyr::collect()` for StructArrays so that these objects can still be returned as tibbles if needed.
* Renames `expect_data_frame()` to `expect_equal_data_frame()` for clarity, and updates it to convert both the object and expected object to data.frames.
* Closes: apache#34775
Authored-by: Nic Crane <thisisnic@gmail.com>
Signed-off-by: Nic Crane <thisisnic@gmail.com>
ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
…tbl and sometimes a data.frame (apache#35173)
Features of this PR:
* Ensures that calling `as.data.frame()` on Arrow objects returns base R `data.frame` objects.
* Drops the `class` attribute metadata of input objects of `data.frame` class (i.e. that don't have inherit from any additional classes other than `data.frame`). This results in us sacrificing roundtrip class fidelity for `data.frame` objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that `as.data.frame()` returns a base R data.frame. Users who wish to input and return a `data.frame` object can call `as.data.frame()` on the returned object.
* Implements `dplyr::collect()` for StructArrays so that these objects can still be returned as tibbles if needed.
* Renames `expect_data_frame()` to `expect_equal_data_frame()` for clarity, and updates it to convert both the object and expected object to data.frames.
* Closes: apache#34775
Authored-by: Nic Crane <thisisnic@gmail.com>
Signed-off-by: Nic Crane <thisisnic@gmail.com>
@thisisnicthisisnic modified the milestone: 13.0.0Aug 3, 2023
@assignUserassignUser added the Breaking Change Includes a breaking change to the API label Aug 7, 2023
@ianmcookianmcook mentioned this pull request Sep 6, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting mergeAwaiting mergeBreaking ChangeIncludes a breaking change to the APIComponent: ParquetComponent: R

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame

4 participants

@thisisnic@ursabot@paleolimbot@assignUser
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame by thisisnic · Pull Request #35173 · apache/arrow · GitHub
Skip to content

GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame - #35173

Merged
thisisnic merged 19 commits into
apache:mainfrom
thisisnic:GH-34775_new_as_df
May 3, 2023
Merged

GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame#35173
thisisnic merged 19 commits into
apache:mainfrom
thisisnic:GH-34775_new_as_df

Conversation

@thisisnic

@thisisnicthisisnic commented Apr 17, 2023

Copy link
Copy Markdown
Member

Features of this PR:

  • Ensures that calling as.data.frame() on Arrow objects returns base R data.frame objects.

  • Drops the class attribute metadata of input objects of data.frame class (i.e. that don't have inherit from any additional classes other than data.frame). This results in us sacrificing roundtrip class fidelity for data.frame objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that as.data.frame() returns a base R data.frame. Users who wish to input and return a data.frame object can call as.data.frame() on the returned object.

  • Implements dplyr::collect() for StructArrays so that these objects can still be returned as tibbles if needed.

  • Renames expect_data_frame() to expect_equal_data_frame() for clarity, and updates it to convert both the object and expected object to data.frames.

  • Closes: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame #34775

@github-actions

Copy link
Copy Markdown

@thisisnic
thisisnic marked this pull request as ready for review April 25, 2023 12:54

@paleolimbotpaleolimbot left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good! It seems like a cleaner solution than what we currently have. I like the idea of dropping metadata on the way in where possible because I seem to remember that we can skip some calls from C++ into R if there is no metadata to restore which speeds things up a bit.

@github-actionsgithub-actionsBot added awaiting merge Awaiting merge and removed awaiting committer review Awaiting committer review labels May 3, 2023
@thisisnic
thisisnic merged commit 205ceb9 into apache:mainMay 3, 2023
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 2ee0345 and contender = 205ceb9. 205ceb9 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.27% ⬆️0.06%] test-mac-arm
[Finished ⬇️3.32% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.66% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 205ceb99 ec2-t3-xlarge-us-east-2
[Finished] 205ceb99 test-mac-arm
[Finished] 205ceb99 ursa-i9-9960x
[Finished] 205ceb99 ursa-thinkcentre-m75q
[Finished] 2ee03450 ec2-t3-xlarge-us-east-2
[Finished] 2ee03450 test-mac-arm
[Finished] 2ee03450 ursa-i9-9960x
[Finished] 2ee03450 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
test-mac-arm

liujiacheng777 pushed a commit to LoongArch-Python/arrow that referenced this pull request May 11, 2023
…tbl and sometimes a data.frame (apache#35173)
Features of this PR:
* Ensures that calling `as.data.frame()` on Arrow objects returns base R `data.frame` objects.
* Drops the `class` attribute metadata of input objects of `data.frame` class (i.e. that don't have inherit from any additional classes other than `data.frame`). This results in us sacrificing roundtrip class fidelity for `data.frame` objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that `as.data.frame()` returns a base R data.frame. Users who wish to input and return a `data.frame` object can call `as.data.frame()` on the returned object.
* Implements `dplyr::collect()` for StructArrays so that these objects can still be returned as tibbles if needed.
* Renames `expect_data_frame()` to `expect_equal_data_frame()` for clarity, and updates it to convert both the object and expected object to data.frames.
* Closes: apache#34775
Authored-by: Nic Crane <thisisnic@gmail.com>
Signed-off-by: Nic Crane <thisisnic@gmail.com>
ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
…tbl and sometimes a data.frame (apache#35173)
Features of this PR:
* Ensures that calling `as.data.frame()` on Arrow objects returns base R `data.frame` objects.
* Drops the `class` attribute metadata of input objects of `data.frame` class (i.e. that don't have inherit from any additional classes other than `data.frame`). This results in us sacrificing roundtrip class fidelity for `data.frame` objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that `as.data.frame()` returns a base R data.frame. Users who wish to input and return a `data.frame` object can call `as.data.frame()` on the returned object.
* Implements `dplyr::collect()` for StructArrays so that these objects can still be returned as tibbles if needed.
* Renames `expect_data_frame()` to `expect_equal_data_frame()` for clarity, and updates it to convert both the object and expected object to data.frames.
* Closes: apache#34775
Authored-by: Nic Crane <thisisnic@gmail.com>
Signed-off-by: Nic Crane <thisisnic@gmail.com>
@thisisnicthisisnic modified the milestone: 13.0.0Aug 3, 2023
@assignUserassignUser added the Breaking Change Includes a breaking change to the API label Aug 7, 2023
@ianmcookianmcook mentioned this pull request Sep 6, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting mergeAwaiting mergeBreaking ChangeIncludes a breaking change to the APIComponent: ParquetComponent: R

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame

4 participants

@thisisnic@ursabot@paleolimbot@assignUser
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame by thisisnic · Pull Request #35173 · apache/arrow · GitHub
Skip to content

GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame - #35173

Merged
thisisnic merged 19 commits into
apache:mainfrom
thisisnic:GH-34775_new_as_df
May 3, 2023
Merged

GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame#35173
thisisnic merged 19 commits into
apache:mainfrom
thisisnic:GH-34775_new_as_df

Conversation

@thisisnic

@thisisnicthisisnic commented Apr 17, 2023

Copy link
Copy Markdown
Member

Features of this PR:

  • Ensures that calling as.data.frame() on Arrow objects returns base R data.frame objects.

  • Drops the class attribute metadata of input objects of data.frame class (i.e. that don't have inherit from any additional classes other than data.frame). This results in us sacrificing roundtrip class fidelity for data.frame objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that as.data.frame() returns a base R data.frame. Users who wish to input and return a data.frame object can call as.data.frame() on the returned object.

  • Implements dplyr::collect() for StructArrays so that these objects can still be returned as tibbles if needed.

  • Renames expect_data_frame() to expect_equal_data_frame() for clarity, and updates it to convert both the object and expected object to data.frames.

  • Closes: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame #34775

@github-actions

Copy link
Copy Markdown

@thisisnic
thisisnic marked this pull request as ready for review April 25, 2023 12:54

@paleolimbotpaleolimbot left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good! It seems like a cleaner solution than what we currently have. I like the idea of dropping metadata on the way in where possible because I seem to remember that we can skip some calls from C++ into R if there is no metadata to restore which speeds things up a bit.

@github-actionsgithub-actionsBot added awaiting merge Awaiting merge and removed awaiting committer review Awaiting committer review labels May 3, 2023
@thisisnic
thisisnic merged commit 205ceb9 into apache:mainMay 3, 2023
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 2ee0345 and contender = 205ceb9. 205ceb9 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.27% ⬆️0.06%] test-mac-arm
[Finished ⬇️3.32% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.66% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 205ceb99 ec2-t3-xlarge-us-east-2
[Finished] 205ceb99 test-mac-arm
[Finished] 205ceb99 ursa-i9-9960x
[Finished] 205ceb99 ursa-thinkcentre-m75q
[Finished] 2ee03450 ec2-t3-xlarge-us-east-2
[Finished] 2ee03450 test-mac-arm
[Finished] 2ee03450 ursa-i9-9960x
[Finished] 2ee03450 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
test-mac-arm

liujiacheng777 pushed a commit to LoongArch-Python/arrow that referenced this pull request May 11, 2023
…tbl and sometimes a data.frame (apache#35173)
Features of this PR:
* Ensures that calling `as.data.frame()` on Arrow objects returns base R `data.frame` objects.
* Drops the `class` attribute metadata of input objects of `data.frame` class (i.e. that don't have inherit from any additional classes other than `data.frame`). This results in us sacrificing roundtrip class fidelity for `data.frame` objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that `as.data.frame()` returns a base R data.frame. Users who wish to input and return a `data.frame` object can call `as.data.frame()` on the returned object.
* Implements `dplyr::collect()` for StructArrays so that these objects can still be returned as tibbles if needed.
* Renames `expect_data_frame()` to `expect_equal_data_frame()` for clarity, and updates it to convert both the object and expected object to data.frames.
* Closes: apache#34775
Authored-by: Nic Crane <thisisnic@gmail.com>
Signed-off-by: Nic Crane <thisisnic@gmail.com>
ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
…tbl and sometimes a data.frame (apache#35173)
Features of this PR:
* Ensures that calling `as.data.frame()` on Arrow objects returns base R `data.frame` objects.
* Drops the `class` attribute metadata of input objects of `data.frame` class (i.e. that don't have inherit from any additional classes other than `data.frame`). This results in us sacrificing roundtrip class fidelity for `data.frame` objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that `as.data.frame()` returns a base R data.frame. Users who wish to input and return a `data.frame` object can call `as.data.frame()` on the returned object.
* Implements `dplyr::collect()` for StructArrays so that these objects can still be returned as tibbles if needed.
* Renames `expect_data_frame()` to `expect_equal_data_frame()` for clarity, and updates it to convert both the object and expected object to data.frames.
* Closes: apache#34775
Authored-by: Nic Crane <thisisnic@gmail.com>
Signed-off-by: Nic Crane <thisisnic@gmail.com>
@thisisnicthisisnic modified the milestone: 13.0.0Aug 3, 2023
@assignUserassignUser added the Breaking Change Includes a breaking change to the API label Aug 7, 2023
@ianmcookianmcook mentioned this pull request Sep 6, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting mergeAwaiting mergeBreaking ChangeIncludes a breaking change to the APIComponent: ParquetComponent: R

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame

4 participants

@thisisnic@ursabot@paleolimbot@assignUser
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame by thisisnic · Pull Request #35173 · apache/arrow · GitHub
Skip to content

GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame - #35173

Merged
thisisnic merged 19 commits into
apache:mainfrom
thisisnic:GH-34775_new_as_df
May 3, 2023
Merged

GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame#35173
thisisnic merged 19 commits into
apache:mainfrom
thisisnic:GH-34775_new_as_df

Conversation

@thisisnic

@thisisnicthisisnic commented Apr 17, 2023

Copy link
Copy Markdown
Member

Features of this PR:

  • Ensures that calling as.data.frame() on Arrow objects returns base R data.frame objects.

  • Drops the class attribute metadata of input objects of data.frame class (i.e. that don't have inherit from any additional classes other than data.frame). This results in us sacrificing roundtrip class fidelity for data.frame objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that as.data.frame() returns a base R data.frame. Users who wish to input and return a data.frame object can call as.data.frame() on the returned object.

  • Implements dplyr::collect() for StructArrays so that these objects can still be returned as tibbles if needed.

  • Renames expect_data_frame() to expect_equal_data_frame() for clarity, and updates it to convert both the object and expected object to data.frames.

  • Closes: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame #34775

@github-actions

Copy link
Copy Markdown

@thisisnic
thisisnic marked this pull request as ready for review April 25, 2023 12:54

@paleolimbotpaleolimbot left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good! It seems like a cleaner solution than what we currently have. I like the idea of dropping metadata on the way in where possible because I seem to remember that we can skip some calls from C++ into R if there is no metadata to restore which speeds things up a bit.

@github-actionsgithub-actionsBot added awaiting merge Awaiting merge and removed awaiting committer review Awaiting committer review labels May 3, 2023
@thisisnic
thisisnic merged commit 205ceb9 into apache:mainMay 3, 2023
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 2ee0345 and contender = 205ceb9. 205ceb9 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.27% ⬆️0.06%] test-mac-arm
[Finished ⬇️3.32% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.66% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 205ceb99 ec2-t3-xlarge-us-east-2
[Finished] 205ceb99 test-mac-arm
[Finished] 205ceb99 ursa-i9-9960x
[Finished] 205ceb99 ursa-thinkcentre-m75q
[Finished] 2ee03450 ec2-t3-xlarge-us-east-2
[Finished] 2ee03450 test-mac-arm
[Finished] 2ee03450 ursa-i9-9960x
[Finished] 2ee03450 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
test-mac-arm

liujiacheng777 pushed a commit to LoongArch-Python/arrow that referenced this pull request May 11, 2023
…tbl and sometimes a data.frame (apache#35173)
Features of this PR:
* Ensures that calling `as.data.frame()` on Arrow objects returns base R `data.frame` objects.
* Drops the `class` attribute metadata of input objects of `data.frame` class (i.e. that don't have inherit from any additional classes other than `data.frame`). This results in us sacrificing roundtrip class fidelity for `data.frame` objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that `as.data.frame()` returns a base R data.frame. Users who wish to input and return a `data.frame` object can call `as.data.frame()` on the returned object.
* Implements `dplyr::collect()` for StructArrays so that these objects can still be returned as tibbles if needed.
* Renames `expect_data_frame()` to `expect_equal_data_frame()` for clarity, and updates it to convert both the object and expected object to data.frames.
* Closes: apache#34775
Authored-by: Nic Crane <thisisnic@gmail.com>
Signed-off-by: Nic Crane <thisisnic@gmail.com>
ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
…tbl and sometimes a data.frame (apache#35173)
Features of this PR:
* Ensures that calling `as.data.frame()` on Arrow objects returns base R `data.frame` objects.
* Drops the `class` attribute metadata of input objects of `data.frame` class (i.e. that don't have inherit from any additional classes other than `data.frame`). This results in us sacrificing roundtrip class fidelity for `data.frame` objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that `as.data.frame()` returns a base R data.frame. Users who wish to input and return a `data.frame` object can call `as.data.frame()` on the returned object.
* Implements `dplyr::collect()` for StructArrays so that these objects can still be returned as tibbles if needed.
* Renames `expect_data_frame()` to `expect_equal_data_frame()` for clarity, and updates it to convert both the object and expected object to data.frames.
* Closes: apache#34775
Authored-by: Nic Crane <thisisnic@gmail.com>
Signed-off-by: Nic Crane <thisisnic@gmail.com>
@thisisnicthisisnic modified the milestone: 13.0.0Aug 3, 2023
@assignUserassignUser added the Breaking Change Includes a breaking change to the API label Aug 7, 2023
@ianmcookianmcook mentioned this pull request Sep 6, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting mergeAwaiting mergeBreaking ChangeIncludes a breaking change to the APIComponent: ParquetComponent: R

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame

4 participants

@thisisnic@ursabot@paleolimbot@assignUser
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame by thisisnic · Pull Request #35173 · apache/arrow · GitHub
Skip to content

GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame - #35173

Merged
thisisnic merged 19 commits into
apache:mainfrom
thisisnic:GH-34775_new_as_df
May 3, 2023
Merged

GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame#35173
thisisnic merged 19 commits into
apache:mainfrom
thisisnic:GH-34775_new_as_df

Conversation

@thisisnic

@thisisnicthisisnic commented Apr 17, 2023

Copy link
Copy Markdown
Member

Features of this PR:

  • Ensures that calling as.data.frame() on Arrow objects returns base R data.frame objects.

  • Drops the class attribute metadata of input objects of data.frame class (i.e. that don't have inherit from any additional classes other than data.frame). This results in us sacrificing roundtrip class fidelity for data.frame objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that as.data.frame() returns a base R data.frame. Users who wish to input and return a data.frame object can call as.data.frame() on the returned object.

  • Implements dplyr::collect() for StructArrays so that these objects can still be returned as tibbles if needed.

  • Renames expect_data_frame() to expect_equal_data_frame() for clarity, and updates it to convert both the object and expected object to data.frames.

  • Closes: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame #34775

@github-actions

Copy link
Copy Markdown

@thisisnic
thisisnic marked this pull request as ready for review April 25, 2023 12:54

@paleolimbotpaleolimbot left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good! It seems like a cleaner solution than what we currently have. I like the idea of dropping metadata on the way in where possible because I seem to remember that we can skip some calls from C++ into R if there is no metadata to restore which speeds things up a bit.

@github-actionsgithub-actionsBot added awaiting merge Awaiting merge and removed awaiting committer review Awaiting committer review labels May 3, 2023
@thisisnic
thisisnic merged commit 205ceb9 into apache:mainMay 3, 2023
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 2ee0345 and contender = 205ceb9. 205ceb9 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.27% ⬆️0.06%] test-mac-arm
[Finished ⬇️3.32% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.66% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 205ceb99 ec2-t3-xlarge-us-east-2
[Finished] 205ceb99 test-mac-arm
[Finished] 205ceb99 ursa-i9-9960x
[Finished] 205ceb99 ursa-thinkcentre-m75q
[Finished] 2ee03450 ec2-t3-xlarge-us-east-2
[Finished] 2ee03450 test-mac-arm
[Finished] 2ee03450 ursa-i9-9960x
[Finished] 2ee03450 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
test-mac-arm

liujiacheng777 pushed a commit to LoongArch-Python/arrow that referenced this pull request May 11, 2023
…tbl and sometimes a data.frame (apache#35173)
Features of this PR:
* Ensures that calling `as.data.frame()` on Arrow objects returns base R `data.frame` objects.
* Drops the `class` attribute metadata of input objects of `data.frame` class (i.e. that don't have inherit from any additional classes other than `data.frame`). This results in us sacrificing roundtrip class fidelity for `data.frame` objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that `as.data.frame()` returns a base R data.frame. Users who wish to input and return a `data.frame` object can call `as.data.frame()` on the returned object.
* Implements `dplyr::collect()` for StructArrays so that these objects can still be returned as tibbles if needed.
* Renames `expect_data_frame()` to `expect_equal_data_frame()` for clarity, and updates it to convert both the object and expected object to data.frames.
* Closes: apache#34775
Authored-by: Nic Crane <thisisnic@gmail.com>
Signed-off-by: Nic Crane <thisisnic@gmail.com>
ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
…tbl and sometimes a data.frame (apache#35173)
Features of this PR:
* Ensures that calling `as.data.frame()` on Arrow objects returns base R `data.frame` objects.
* Drops the `class` attribute metadata of input objects of `data.frame` class (i.e. that don't have inherit from any additional classes other than `data.frame`). This results in us sacrificing roundtrip class fidelity for `data.frame` objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that `as.data.frame()` returns a base R data.frame. Users who wish to input and return a `data.frame` object can call `as.data.frame()` on the returned object.
* Implements `dplyr::collect()` for StructArrays so that these objects can still be returned as tibbles if needed.
* Renames `expect_data_frame()` to `expect_equal_data_frame()` for clarity, and updates it to convert both the object and expected object to data.frames.
* Closes: apache#34775
Authored-by: Nic Crane <thisisnic@gmail.com>
Signed-off-by: Nic Crane <thisisnic@gmail.com>
@thisisnicthisisnic modified the milestone: 13.0.0Aug 3, 2023
@assignUserassignUser added the Breaking Change Includes a breaking change to the API label Aug 7, 2023
@ianmcookianmcook mentioned this pull request Sep 6, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting mergeAwaiting mergeBreaking ChangeIncludes a breaking change to the APIComponent: ParquetComponent: R

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame

4 participants

@thisisnic@ursabot@paleolimbot@assignUser
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame by thisisnic · Pull Request #35173 · apache/arrow · GitHub
Skip to content

GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame - #35173

Merged
thisisnic merged 19 commits into
apache:mainfrom
thisisnic:GH-34775_new_as_df
May 3, 2023
Merged

GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame#35173
thisisnic merged 19 commits into
apache:mainfrom
thisisnic:GH-34775_new_as_df

Conversation

@thisisnic

@thisisnicthisisnic commented Apr 17, 2023

Copy link
Copy Markdown
Member

Features of this PR:

  • Ensures that calling as.data.frame() on Arrow objects returns base R data.frame objects.

  • Drops the class attribute metadata of input objects of data.frame class (i.e. that don't have inherit from any additional classes other than data.frame). This results in us sacrificing roundtrip class fidelity for data.frame objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that as.data.frame() returns a base R data.frame. Users who wish to input and return a data.frame object can call as.data.frame() on the returned object.

  • Implements dplyr::collect() for StructArrays so that these objects can still be returned as tibbles if needed.

  • Renames expect_data_frame() to expect_equal_data_frame() for clarity, and updates it to convert both the object and expected object to data.frames.

  • Closes: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame #34775

@github-actions

Copy link
Copy Markdown

@thisisnic
thisisnic marked this pull request as ready for review April 25, 2023 12:54

@paleolimbotpaleolimbot left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good! It seems like a cleaner solution than what we currently have. I like the idea of dropping metadata on the way in where possible because I seem to remember that we can skip some calls from C++ into R if there is no metadata to restore which speeds things up a bit.

@github-actionsgithub-actionsBot added awaiting merge Awaiting merge and removed awaiting committer review Awaiting committer review labels May 3, 2023
@thisisnic
thisisnic merged commit 205ceb9 into apache:mainMay 3, 2023
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 2ee0345 and contender = 205ceb9. 205ceb9 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.27% ⬆️0.06%] test-mac-arm
[Finished ⬇️3.32% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.66% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 205ceb99 ec2-t3-xlarge-us-east-2
[Finished] 205ceb99 test-mac-arm
[Finished] 205ceb99 ursa-i9-9960x
[Finished] 205ceb99 ursa-thinkcentre-m75q
[Finished] 2ee03450 ec2-t3-xlarge-us-east-2
[Finished] 2ee03450 test-mac-arm
[Finished] 2ee03450 ursa-i9-9960x
[Finished] 2ee03450 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
test-mac-arm

liujiacheng777 pushed a commit to LoongArch-Python/arrow that referenced this pull request May 11, 2023
…tbl and sometimes a data.frame (apache#35173)
Features of this PR:
* Ensures that calling `as.data.frame()` on Arrow objects returns base R `data.frame` objects.
* Drops the `class` attribute metadata of input objects of `data.frame` class (i.e. that don't have inherit from any additional classes other than `data.frame`). This results in us sacrificing roundtrip class fidelity for `data.frame` objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that `as.data.frame()` returns a base R data.frame. Users who wish to input and return a `data.frame` object can call `as.data.frame()` on the returned object.
* Implements `dplyr::collect()` for StructArrays so that these objects can still be returned as tibbles if needed.
* Renames `expect_data_frame()` to `expect_equal_data_frame()` for clarity, and updates it to convert both the object and expected object to data.frames.
* Closes: apache#34775
Authored-by: Nic Crane <thisisnic@gmail.com>
Signed-off-by: Nic Crane <thisisnic@gmail.com>
ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
…tbl and sometimes a data.frame (apache#35173)
Features of this PR:
* Ensures that calling `as.data.frame()` on Arrow objects returns base R `data.frame` objects.
* Drops the `class` attribute metadata of input objects of `data.frame` class (i.e. that don't have inherit from any additional classes other than `data.frame`). This results in us sacrificing roundtrip class fidelity for `data.frame` objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that `as.data.frame()` returns a base R data.frame. Users who wish to input and return a `data.frame` object can call `as.data.frame()` on the returned object.
* Implements `dplyr::collect()` for StructArrays so that these objects can still be returned as tibbles if needed.
* Renames `expect_data_frame()` to `expect_equal_data_frame()` for clarity, and updates it to convert both the object and expected object to data.frames.
* Closes: apache#34775
Authored-by: Nic Crane <thisisnic@gmail.com>
Signed-off-by: Nic Crane <thisisnic@gmail.com>
@thisisnicthisisnic modified the milestone: 13.0.0Aug 3, 2023
@assignUserassignUser added the Breaking Change Includes a breaking change to the API label Aug 7, 2023
@ianmcookianmcook mentioned this pull request Sep 6, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting mergeAwaiting mergeBreaking ChangeIncludes a breaking change to the APIComponent: ParquetComponent: R

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame

4 participants

@thisisnic@ursabot@paleolimbot@assignUser
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame by thisisnic · Pull Request #35173 · apache/arrow · GitHub
Skip to content

GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame - #35173

Merged
thisisnic merged 19 commits into
apache:mainfrom
thisisnic:GH-34775_new_as_df
May 3, 2023
Merged

GH-34775: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame#35173
thisisnic merged 19 commits into
apache:mainfrom
thisisnic:GH-34775_new_as_df

Conversation

@thisisnic

@thisisnicthisisnic commented Apr 17, 2023

Copy link
Copy Markdown
Member

Features of this PR:

  • Ensures that calling as.data.frame() on Arrow objects returns base R data.frame objects.

  • Drops the class attribute metadata of input objects of data.frame class (i.e. that don't have inherit from any additional classes other than data.frame). This results in us sacrificing roundtrip class fidelity for data.frame objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that as.data.frame() returns a base R data.frame. Users who wish to input and return a data.frame object can call as.data.frame() on the returned object.

  • Implements dplyr::collect() for StructArrays so that these objects can still be returned as tibbles if needed.

  • Renames expect_data_frame() to expect_equal_data_frame() for clarity, and updates it to convert both the object and expected object to data.frames.

  • Closes: [R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame #34775

@github-actions

Copy link
Copy Markdown

@thisisnic
thisisnic marked this pull request as ready for review April 25, 2023 12:54

@paleolimbotpaleolimbot left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good! It seems like a cleaner solution than what we currently have. I like the idea of dropping metadata on the way in where possible because I seem to remember that we can skip some calls from C++ into R if there is no metadata to restore which speeds things up a bit.

@github-actionsgithub-actionsBot added awaiting merge Awaiting merge and removed awaiting committer review Awaiting committer review labels May 3, 2023
@thisisnic
thisisnic merged commit 205ceb9 into apache:mainMay 3, 2023
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 2ee0345 and contender = 205ceb9. 205ceb9 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️2.27% ⬆️0.06%] test-mac-arm
[Finished ⬇️3.32% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.66% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 205ceb99 ec2-t3-xlarge-us-east-2
[Finished] 205ceb99 test-mac-arm
[Finished] 205ceb99 ursa-i9-9960x
[Finished] 205ceb99 ursa-thinkcentre-m75q
[Finished] 2ee03450 ec2-t3-xlarge-us-east-2
[Finished] 2ee03450 test-mac-arm
[Finished] 2ee03450 ursa-i9-9960x
[Finished] 2ee03450 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
test-mac-arm

liujiacheng777 pushed a commit to LoongArch-Python/arrow that referenced this pull request May 11, 2023
…tbl and sometimes a data.frame (apache#35173)
Features of this PR:
* Ensures that calling `as.data.frame()` on Arrow objects returns base R `data.frame` objects.
* Drops the `class` attribute metadata of input objects of `data.frame` class (i.e. that don't have inherit from any additional classes other than `data.frame`). This results in us sacrificing roundtrip class fidelity for `data.frame` objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that `as.data.frame()` returns a base R data.frame. Users who wish to input and return a `data.frame` object can call `as.data.frame()` on the returned object.
* Implements `dplyr::collect()` for StructArrays so that these objects can still be returned as tibbles if needed.
* Renames `expect_data_frame()` to `expect_equal_data_frame()` for clarity, and updates it to convert both the object and expected object to data.frames.
* Closes: apache#34775
Authored-by: Nic Crane <thisisnic@gmail.com>
Signed-off-by: Nic Crane <thisisnic@gmail.com>
ArgusLi pushed a commit to Bit-Quill/arrow that referenced this pull request May 15, 2023
…tbl and sometimes a data.frame (apache#35173)
Features of this PR:
* Ensures that calling `as.data.frame()` on Arrow objects returns base R `data.frame` objects.
* Drops the `class` attribute metadata of input objects of `data.frame` class (i.e. that don't have inherit from any additional classes other than `data.frame`). This results in us sacrificing roundtrip class fidelity for `data.frame` objects (i.e. if we input a base R data.frame, convert it to an Arrow Table, and then convert it back to R, we get a tibble). However, we now have consistency in the type of returned objects, retain roundtrip fidelity for other (non-class) metadata, and guarantee that `as.data.frame()` returns a base R data.frame. Users who wish to input and return a `data.frame` object can call `as.data.frame()` on the returned object.
* Implements `dplyr::collect()` for StructArrays so that these objects can still be returned as tibbles if needed.
* Renames `expect_data_frame()` to `expect_equal_data_frame()` for clarity, and updates it to convert both the object and expected object to data.frames.
* Closes: apache#34775
Authored-by: Nic Crane <thisisnic@gmail.com>
Signed-off-by: Nic Crane <thisisnic@gmail.com>
@thisisnicthisisnic modified the milestone: 13.0.0Aug 3, 2023
@assignUserassignUser added the Breaking Change Includes a breaking change to the API label Aug 7, 2023
@ianmcookianmcook mentioned this pull request Sep 6, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting mergeAwaiting mergeBreaking ChangeIncludes a breaking change to the APIComponent: ParquetComponent: R

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[R] arrow_table: as.data.frame() sometimes returns a tbl and sometimes a data.frame

4 participants

@thisisnic@ursabot@paleolimbot@assignUser