R中的未启用SD会导致输出不正确

R中的未启用SD会导致输出不正确,r,data.table,R,Data.table,我想计算变量的乘积c(“SA.Dretwdeq”、“SB.Dretwdeq”、“ZA.Dretwdeq”、“ZA.Dretwdeq”)在我的数据集中,我的代码如下: setDT(WC) ## WC is the name of data frame down below : x<-5 interesting.sub.vars<-c("SA.Dretwdeq","SB.Dretwdeq","ZA.Dretwdeq","ZA.Dretwdeq") anscol.s

我想计算变量的乘积
c(“SA.Dretwdeq”、“SB.Dretwdeq”、“ZA.Dretwdeq”、“ZA.Dretwdeq”)
在我的数据集中,我的代码如下:

setDT(WC) ## WC is the name of data frame down below :
    x<-5
    interesting.sub.vars<-c("SA.Dretwdeq","SB.Dretwdeq","ZA.Dretwdeq","ZA.Dretwdeq")
    anscol.sub = paste0('subBHR0',x,interesting.sub.vars)

    WC[,(anscol.sub) := prod(.SD,na.rm = TRUE),  .SDcols=interesting.sub.vars, by = Stkcd]

setDF(WC)

prod(WC[WC$Stkcd==12,]$SA.Dretwdeq) #### calculated by hand 
WC[WC$Stkcd==12,]$subBHR05SA.Dretwdeq #### calculated by the code above
然后
prod(WC[WC$Stkcd==12,]$SA.Dretwdeq)-WC[WC$Stkcd==12,]$subBHR05SA.Dretwdeq
将等于0

有人知道我错过了什么吗???我花了整个下午,但还是找不到出路

structure(list(Stkcd = c(600773L, 2055L, 600550L, 600101L, 600232L, 
584L, 600979L, 600270L, 600596L, 600089L, 778L, 600507L, 510L, 
600236L, 200521L, 2145L, 600331L, 521L, 600877L, 600109L, 593L, 
12L, 607L, 600378L, 2190L, 903L, 600702L, 935L, 2192L, 600615L, 
600880L, 837L, 600379L, 600358L, 600718L, 600353L, 2143L, 601857L, 
600644L, 900935L, 731L, 569L, 200012L, 600543L, 878L, 600456L, 
810L, 2122L, 586L, 600131L, 876L, 600321L, 600875L, 606L, 519L, 
600448L, 600391L, 600839L, 600490L, 2023L, 601186L, 591L, 600674L, 
600074L, 2024L, 790L, 2066L, 2154L, 539L, 600073L, 600068L, 200012L, 
584L, 600839L, 600068L, 2190L, 600131L, 606L, 600232L, 519L, 
600877L, 600270L, 2055L, 601186L, 935L, 600073L, 600358L, 607L, 
601857L, 600236L, 600456L, 12L, 600378L, 591L, 2023L, 2143L, 
200521L, 600979L, 600507L, 903L), SA.Dretwdeq = c(-0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, -0.000178999995114282, -0.000178999995114282, 
-0.000178999995114282, 0.0188650004565716, 0.0188650004565716, 
0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 
0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 
0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 
0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 
0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 
0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 0.0188650004565716, 
0.0188650004565716, 0.0188650004565716, 0.0188650004565716), 
    SB.Dretwdeq = c(-0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    -0.00631299987435341, -0.00631299987435341, -0.00631299987435341, 
    0.00821300037205219, 0.00821300037205219, 0.00821300037205219, 
    0.00821300037205219, 0.00821300037205219, 0.00821300037205219, 
    0.00821300037205219, 0.00821300037205219, 0.00821300037205219, 
    0.00821300037205219, 0.00821300037205219, 0.00821300037205219, 
    0.00821300037205219, 0.00821300037205219, 0.00821300037205219, 
    0.00821300037205219, 0.00821300037205219, 0.00821300037205219, 
    0.00821300037205219, 0.00821300037205219, 0.00821300037205219, 
    0.00821300037205219, 0.00821300037205219, 0.00821300037205219, 
    0.00821300037205219, 0.00821300037205219, 0.00821300037205219, 
    0.00821300037205219, 0.00821300037205219), ZA.Dretwdeq = c(0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603
    ), ZA.Dretwdeq.1 = c(0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.000387000007322058, 0.000387000007322058, 0.000387000007322058, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603, 0.0239070001989603, 
    0.0239070001989603, 0.0239070001989603)), .Names = c("Stkcd", 
"SA.Dretwdeq", "SB.Dretwdeq", "ZA.Dretwdeq", "ZA.Dretwdeq.1"), row.names = c(NA, 
100L), class = "data.frame")

我们需要使用
lappy
遍历列,并将其分配给新列

interesting.sub.vars <- names(WC)[-1] #interesting.sub.vars had different column names
anscol.sub = paste0('subBHR0',x,interesting.sub.vars)
setDT(WC)[,  (anscol.sub) := lapply(.SD, prod, na.rm = TRUE) , 
                          .SDcols = interesting.sub.vars, by = Stkcd]

interest.sub.vars感谢您的回复,并对混淆表示抱歉,x只是我在以前代码中使用的一个数字,无论如何,我都会更新它。我运行了您的代码,但它给了我错误:在
[.data.table
(setDT(WC),
:=
((anscol.sub),lappy(.SD,prod)),:要替换的项目数不是替换长度的倍数您是否使用了
na.rm=TRUE
I add na.rm=TRUE,但仍然不正确,我只是检查了所有四个新变量,只有第一个变量在prod之间有“间隙”(WC[WC$Stkcd==12,]$SA.Dretwdeq)-WC[WC$Stkcd==12,]$subBHR05SA.Dretwdeq。其他三个是fine@JasonGoal您有不同的列名,而
有趣。sub.vars
有重复的名称
interesting.sub.vars <- names(WC)[-1] #interesting.sub.vars had different column names
anscol.sub = paste0('subBHR0',x,interesting.sub.vars)
setDT(WC)[,  (anscol.sub) := lapply(.SD, prod, na.rm = TRUE) , 
                          .SDcols = interesting.sub.vars, by = Stkcd]