gpt4 book ai didi

r - 使用 :=, 时为什么默认使用 with=TRUE?

转载 作者:行者123 更新时间:2023-12-04 15:11:37 26 4
gpt4 key购买 nike

data.table , 默认 with = TRUEjx 的框架内进行评估.然后将列名用作变量会有所帮助。当with = FALSE , j是要选择的名称或位置的向量。

我设法找到了一些 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

正如贾斯汀所暗示的那样,大多数时候我们分配给我们预先知道的新列或现有列。换句话说,最常见的情况是,分配给的列不保存在变量中。我们经常这样做,因此需要方便。也就是说, 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.

但是,由于 :=是一个赋值运算符和 jDT 范围内进行评估,对我来说,如果 DT[, x.sum:=cumsum(x)]未分配给 x.sum柱子。

显式括号,即 (target):= , 意味着某种评估,因此语法更清晰。反正在我心里。当然也可以调用 paste0等直接在 := 的左侧也不需要 with=FALSE ;例如。,
DT[, paste0("SUM.",colNames) := lapply(.SD, ...), by=...]

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

关于r - 使用 :=, 时为什么默认使用 with=TRUE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21239067/

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