data.table fcase与dplyr案例

data.table fcase与dplyr案例,r,dplyr,data.table,R,Dplyr,Data.table,以下代码在使用fcase计算行时抛出错误 library(data.table) library(dplyr) tbl.test <- data.table(x = 0.5*(1:2)) tbl.test[, .(fcase(x < 1, x+1, default = x))] tbl.test[, .(case_when(x < 1 ~ x+1, TRUE ~ x)

以下代码在使用fcase计算行时抛出错误

library(data.table)
library(dplyr)
tbl.test <- data.table(x = 0.5*(1:2))
tbl.test[, .(fcase(x < 1, x+1, 
                 default = x))]

tbl.test[, .(case_when(x < 1 ~ x+1, 
                        TRUE ~ x)
             )]

库(data.table)
图书馆(dplyr)

tbl.test您没有明确说明问题,但我假设您想知道是否有方法将向量化默认值与
fcase()
一起使用。一种方法是构造一个长度与其他条件相等的
TRUE
s向量作为最后一个元素,类似于
case\u when()
的工作原理:

库(data.table)
图书馆(dplyr)
种子集(123)
测试警告:有些表达式在每次迭代中都有一个GC;因此,过滤被禁用。
#>#A tibble:2 x 6
#>表达式最小中位数`itr/sec`mem_alloc`gc/sec`
#>               
#>1 fcase 16.5ms 24.3ms 33.3 36.1MB 43.1
#>2当146.4ms 147.9ms 6.60 129.9MB 28.1

您没有明确说明问题,但我假设您想知道是否有方法将向量化默认值与
fcase()
一起使用。一种方法是构造一个长度与其他条件相等的
TRUE
s向量作为最后一个元素,类似于
case\u when()
的工作原理:

库(data.table)
图书馆(dplyr)
种子集(123)
测试警告:有些表达式在每次迭代中都有一个GC;因此,过滤被禁用。
#>#A tibble:2 x 6
#>表达式最小中位数`itr/sec`mem_alloc`gc/sec`
#>               
#>1 fcase 16.5ms 24.3ms 33.3 36.1MB 43.1
#>2当146.4ms 147.9ms 6.60 129.9MB 28.1

这是否回答了您的问题@不,不幸的是,它不回答。因为我遇到的问题是,使用fcase时,我不能将表中的一列作为默认值。在这个主题上有一个悬而未决的问题:这是否回答了您的问题@不,不幸的是,它不回答。因为我遇到的问题是,使用fcase时,我不能将表中的一列作为默认值。在这个主题上有一个悬而未决的问题:粘贴的基准测试结果可能会产生误导。你可以试着用一个普通的单位来表示度量值,或者仅仅使用微基准。@jangorecki我不认为有人误读单位的几率非常高,但我已经更新了结果。一般来说,我更喜欢
bench::mark()
而不是microbenchmark,因为它还报告内存使用情况并检查结果是否匹配。我可以将
time\u units
设置为相等,但是没有控制内存单元的选项(这可能是一个有用的功能请求),因此我只是用较小的向量更新结果,以使两个单元匹配。粘贴的基准结果可能会产生误导。你可以试着用一个普通的单位来表示度量值,或者仅仅使用微基准。@jangorecki我不认为有人误读单位的几率非常高,但我已经更新了结果。一般来说,我更喜欢
bench::mark()
而不是microbenchmark,因为它还报告内存使用情况并检查结果是否匹配。我可以将
time\u units
设置为相等,但是没有控制内存单元的选项(这可能是一个有用的功能请求),因此我只是用较小的向量更新结果,以使两个单元匹配。