data.table fcase与dplyr案例
以下代码在使用fcase计算行时抛出错误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)
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
设置为相等,但是没有控制内存单元的选项(这可能是一个有用的功能请求),因此我只是用较小的向量更新结果,以使两个单元匹配。