R “j”中的求值顺序不是连续的`

R “j”中的求值顺序不是连续的`,r,data.table,R,Data.table,在谈到如何编写递归计算代码时,我注意到计算顺序在j 示例使用上一行和当前行的简单总和来演示问题,因此我不要求使用shift: library(data.table) #data.table_1.12.8 R-3.6.1 Win x64 DT <- data.table(rn=1:4, X=c(0,0,1,0), Y=c(0,0,0,0)) DT[, { A <- X[1L] B <- X[1L] .SD[-1L, {

在谈到如何编写递归计算代码时,我注意到计算顺序在
j

示例使用上一行和当前行的简单总和来演示问题,因此我不要求使用
shift

library(data.table) #data.table_1.12.8 R-3.6.1 Win x64
DT <- data.table(rn=1:4, X=c(0,0,1,0), Y=c(0,0,0,0))

DT[, { 
    A <- X[1L]
    B <- X[1L]
    .SD[-1L,
        {
            print(.BY$rn)
            print(c(X=X, A=A, B=B))

            #expecting the next 4 lines to be evaluated in sequence but seems like B <- X is evaluated before these 2 lines
            sA <- A + Y  #line 1
            sB <- B + Y  #line 2

            B <- X       #line 3
            A <- copy(X) #line 4

            print(c(X=X, A=A, B=B))
            .(sA, sB)
        },
        rn]
}]
library(data.table)#data.table_1.12.8 R-3.6.1 Win x64

DT请在github中填写,如果可能的话,可以简化,而不是打印,您可以使用
stopifnot(all.equal())
,这样我们可以更轻松地将其转换为单元测试。
[1] 2
X A B 
0 0 0 
X A B 
0 0 0 
[1] 3
X A B 
1 0 1<- this should be 0 
X A B 
1 1 1 
[1] 4
X A B 
0 1 0<- this should be 1 
X A B 
0 0 0