gpt4 book ai didi

r - R 中箭头数据集过滤表达式的正确语法

转载 作者:行者123 更新时间:2023-12-04 07:43:47 27 4
gpt4 key购买 nike

我正在尝试使用 arrow封装(相对最近实现的)DataSet API 以将文件目录读入内存,并利用 c++后端过滤行和列。我想用arrow直接打包函数,而不是 dplyr 的包装函数风格动词。截至今天,这些函数还处于其生命周期的早期,因此我很难找到一些说明语法的示例。
为了理解语法,我创建了一个非常小的测试示例。前两个查询按预期工作。

library(arrow) ## version 4.0.0

write.csv(mtcars,"ArrowTest_mtcars/mtcars.csv")
## Define a dataset object
DS <- arrow::open_dataset(sources = "ArrowTest_mtcars", format = "text")

## Generate a basic scanner
AT <- DS$NewScan()$UseThreads()$Finish()$ToTable()
head(as.data.frame(AT), n = 3)
## mpg cyl disp hp drat wt qsec vs am gear carb
## 1 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## 2 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## 3 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1

## Generate a basic scanner with projection to select columns
AT <- DS$NewScan()$UseThreads()$Project(c("mpg","cyl"))$Finish()$ToTable()
head(as.data.frame(AT), n = 3)
# mpg cyl
#1 21.0 6
#2 21.0 6
#3 22.8 4
但是,我还没有弄清楚实现过滤表达式的正确语法。我已经尝试了很多方法,但我最好的猜测仍然无效,并且在我执行 Filt <- Expression$create(...) 时会导致段错误。线。
## Generate a basic scanner with filtering where column `cyl` = 6    
## My best guess at what might work, but causes a segfault instead
Filt <- Expression$create("==",args = list(Expression$field_ref("cyl"), Scalar$create(6L)))

AT <- DS$NewScan()$UseThreads()$Filter(Filt)$Finish()$ToTable()
head(as.data.frame(AT))
实现基于行的过滤的正确语法是什么?

最佳答案

文档在这方面非常糟糕。但是一些尝试和测试实际上让我得到了一些可能会引导您找到正确答案的东西。我发现的问题是 Scalar$create 知道使用哪个函数命名:

Filt = Expression$create('or', 
args = list(Expression$field_ref("cyl") == 6L,
Expression$field_ref('cyl') == 4L))

AT <- DS$NewScan()$UseThreads()$Filter(Filt)$Finish()$ToTable()
head(as.data.frame(AT))
但是,请注意,对于单个条件,仅使用 Expression$field_ref(...) == x直接在过滤器中工作
AT <- DS$NewScan()$UseThreads()$Filter(Expression$field_ref("cyl") == 6L)$Finish()$ToTable()
head(as.data.frame(AT))

关于r - R 中箭头数据集过滤表达式的正确语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67303166/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com