使用:=时,为什么with = TRUE是默认值?

Bigchao

data.table默认情况下with = TRUEj被评估在框架内x这样有助于将列名用作变量。当时with = FALSEj是要选择的名称或位置的向量。

我设法找到了一些示例with = FALSE

set.seed(1234)
DT <- data.table(x=rep(c(1,2,3),each=4), y=c("A","B"), v=sample(1:100,12))

## The askers's solution
#first step is to create cumsum columns
colNames <- c("x","v"); newColNames <- paste0("SUM.",colNames)
DT[, newColNames := lapply(.SD,cumsum) ,by=y, .SDcols = colNames, with=FALSE];
test <- DT[, newColNames:=lapply(.SD,cumsum) ,by=y, .SDcols=colNames, with=TRUE];

我们可以检查一下DT

> DT                       # setting `with=FALSE` - what I require
    x y  v SUM.x SUM.v
 1: 1 A 12     1    12
 2: 1 B 62     1    62
 3: 1 A 60     2    72
 4: 1 B 61     2   123
 5: 2 A 83     4   155
 6: 2 B 97     4   220
 7: 2 A  1     6   156
 8: 2 B 22     6   242
 9: 3 A 99     9   255
10: 3 B 47     9   289
11: 3 A 63    12   318
12: 3 B 49    12   338

并且test是:

> test                     # this is when setting " with = TRUE"
    x y  v newColNames
 1: 1 A 12           1
 2: 1 B 62           1
 3: 1 A 60           2
 4: 1 B 61           2
 5: 2 A 83           4
 6: 2 B 97           4
 7: 2 A  1           6
 8: 2 B 22           6
 9: 3 A 99           9
10: 3 B 47           9
11: 3 A 63          12
12: 3 B 49          12

我不明白为什么设置时结果是这样with = TRUE所以我的问题基本上是什么时候with = TRUE有用?

我不明白为什么默认设置是with = TRUE,尽管一定有很好的理由。

非常感谢!

马特·道尔

我明白你的意思了。我们已不再使用with=TRUE|FALSE与结合使用:=由于尚不清楚是with=TRUE指的左侧还是右侧:=取而代之的:=是,现在最好将LHS的方括号括起来。

DT[, x.sum:=cumsum(x)]     # assign cumsum(x) to the column called "x.sum"
DT[, (target):=cumsum(x)]  # assign to the name contained in target's value 

正如贾斯汀(Justin)提到的,大多数时候,我们分配给我们预先知道的新的或现有的列。换句话说,最常见的是,分配给的列保存在变量中。我们做了很多,所以需要方便。也就是说,它data.table很灵活,还允许您以编程方式定义目标列名称。

我想可以这样认为:

DT[, "x.sum":=cumsum(x)]   # assign cumsum(x) to the column called "x.sum"
DT[, x.sum:=cumsum(x)]     # assign to the name contained in x.sum's contents.

但是,由于:=是赋值运算符,并且j在的范围内进行求值DT,所以如果DT[, x.sum:=cumsum(x)]不分配给该x.sum,将会造成混乱

显式括号(即(target):=)表示某种求值方式,因此语法更加清晰。反正在我心中。当然,你可以调用paste0在左侧直接等:=也无需with=FALSE; 例如,

DT[, paste0("SUM.",colNames) := lapply(.SD, ...), by=...]

简而言之,with当我使用,我从不使用:=

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在使用||时使用“意外的“。”” 括号中默认值的运算符

来自分类Dev

使用Upsert更新为true时未设置默认值

来自分类Dev

使用G1收集器时,为什么-XX:+ ExplicitGCInvokesConcurrent不是默认值?

来自分类Dev

为什么在SSRS 2012中允许为null时无法使用默认值

来自分类Dev

为什么在实现中允许使用与在接口上定义的默认值不同的默认值?

来自分类Dev

Java:为什么未使用XX:SurvivorRatio的默认值?

来自分类Dev

为什么FreezeGun不使用SQLAlchemy默认值?

来自分类Dev

使用SingleOrDefault()时的默认值

来自分类Dev

为什么使用指针而不是直接实例化对象时不使用类成员的默认值?

来自分类Dev

为什么我可以使用默认的<=>而不是用户提供的默认值调用==?

来自分类Dev

MS SQL在NOT NULL字段上显式使用“默认默认值”-为什么?

来自分类Dev

当默认值不在最后时,在 switch 语句中使用默认值后中断

来自分类Dev

为什么不使用avro默认值?(使用avro-python)

来自分类Dev

当我们在switch语句中不使用'break'语句时,为什么在默认值以下的其他情况之前先评估'默认'?

来自分类Dev

使Laravel在插入/更新时使用MySQL默认值

来自分类Dev

Scala-映射时使用默认值None?

来自分类Dev

使用级联参数时不显示默认值

来自分类Dev

使用laravel上传文件时SQL默认值错误

来自分类Dev

为什么在访问结构时需要默认值?

来自分类Dev

为什么Spring的JDBC模板不使用表的默认值

来自分类Dev

为什么要为此类初始化程序使用默认值None?

来自分类Dev

为什么xdg-open使用Mendeley作为PDF的默认值?

来自分类Dev

为什么需要默认值呢?

来自分类Dev

为什么nullglob不是默认值?

来自分类Dev

使用unittest.mock.patch时,默认情况下为什么autospec不是True?

来自分类Dev

核心数据中没有默认值的可选(数字)属性-为什么不鼓励使用它们?

来自分类Dev

使用AWS CLI时如何在JMESPath查询中为空值设置默认值?

来自分类Dev

在“ INSERT ON DUPLICATE KEY UPDATE”中,检测在指定插入值时是否使用默认值

来自分类Dev

当在Python中将参数指定为None时,让函数使用其默认值作为参数的好方法是什么?

Related 相关文章

  1. 1

    为什么在使用||时使用“意外的“。”” 括号中默认值的运算符

  2. 2

    使用Upsert更新为true时未设置默认值

  3. 3

    使用G1收集器时,为什么-XX:+ ExplicitGCInvokesConcurrent不是默认值?

  4. 4

    为什么在SSRS 2012中允许为null时无法使用默认值

  5. 5

    为什么在实现中允许使用与在接口上定义的默认值不同的默认值?

  6. 6

    Java:为什么未使用XX:SurvivorRatio的默认值?

  7. 7

    为什么FreezeGun不使用SQLAlchemy默认值?

  8. 8

    使用SingleOrDefault()时的默认值

  9. 9

    为什么使用指针而不是直接实例化对象时不使用类成员的默认值?

  10. 10

    为什么我可以使用默认的<=>而不是用户提供的默认值调用==?

  11. 11

    MS SQL在NOT NULL字段上显式使用“默认默认值”-为什么?

  12. 12

    当默认值不在最后时,在 switch 语句中使用默认值后中断

  13. 13

    为什么不使用avro默认值?(使用avro-python)

  14. 14

    当我们在switch语句中不使用'break'语句时,为什么在默认值以下的其他情况之前先评估'默认'?

  15. 15

    使Laravel在插入/更新时使用MySQL默认值

  16. 16

    Scala-映射时使用默认值None?

  17. 17

    使用级联参数时不显示默认值

  18. 18

    使用laravel上传文件时SQL默认值错误

  19. 19

    为什么在访问结构时需要默认值?

  20. 20

    为什么Spring的JDBC模板不使用表的默认值

  21. 21

    为什么要为此类初始化程序使用默认值None?

  22. 22

    为什么xdg-open使用Mendeley作为PDF的默认值?

  23. 23

    为什么需要默认值呢?

  24. 24

    为什么nullglob不是默认值?

  25. 25

    使用unittest.mock.patch时,默认情况下为什么autospec不是True?

  26. 26

    核心数据中没有默认值的可选(数字)属性-为什么不鼓励使用它们?

  27. 27

    使用AWS CLI时如何在JMESPath查询中为空值设置默认值?

  28. 28

    在“ INSERT ON DUPLICATE KEY UPDATE”中,检测在指定插入值时是否使用默认值

  29. 29

    当在Python中将参数指定为None时,让函数使用其默认值作为参数的好方法是什么?

热门标签

归档