R:二进制运算符的数据表非数字参数

时间:2016-03-29 01:32:01

标签: r data.table

我正在尝试为data.table中的选定行分配值:

pt[4:108, dqv:=(ifelse(deg!=1,dr,0)+ifelse(deg==3, dr^2, 0)+1)*mp*shift(dcp, 4-deg)
      +(shift(cv, 4-deg)*shift(dcp, 4-deg)+shift(dqv, 4-deg)*shift(ddqp, 4-deg))*fm]

始终返回的错误是:

Error in (ifelse(deg != 1, dr, 0) + ifelse(deg == 3, dr^2, 0) + 1) * mp *  : 
non-numeric argument to binary operator

如果我一次只分配1行,代码就可以工作。如:

pt[4, assignment...]

如果从4:5开始执行两行,则分配也会失败。并且单独完成,分配适用于第4行或第5行。因此,对于NAs或隐藏在我的数据中的字符,它不应该是一个问题。 我想可能是因为ifelse没有将向量作为参数。但是,根据定义,ifelse不会在第一个参数中使用向量吗?我还对data.table中的整列进行了类似的分配,并且它有效。也许我在内存中有太多的数据集悬垂而导致错误?

知道我做错了什么吗?谢谢!

我的data.table看起来像:

   ind deg       crp       cdqp        dcp       ddfp       ccp
1:  36   3 0.0000000 0.00000000 0.08694944 0.08819521 1.0000000
2:  36   2 0.0000000 0.00000000 0.04128377 0.05363146 1.0000000
3:  36   1 0.7761228 0.01107921 0.01909992 0.03213586 0.2127980
4:  35   3 0.0000000 0.00000000 0.08949825 0.08173958 1.0000000
5:  35   2 0.0000000 0.00000000 0.04255635 0.04956826 1.0000000
6:  35   1 0.7483854 0.01045624 0.01970272 0.02965017 0.2411584
        ddqp  rv  cv dqv
1: 0.8248554  NA  NA   0
2: 0.9050848  NA  NA   0
3: 0.9487642 100 100   0
4: 0.8287622   0   0  NA
5: 0.9078754   0   0  NA
6: 0.9506471  NA  NA  NA

1 个答案:

答案 0 :(得分:0)

我总是遇到ifelse()的错误经历,试试,

pt[4:108,][ deg != 1 & deg == 3, dqv:=(dr + dr^2 + 1)*mp*shift(dcp, 4-deg)
      +(shift(cv, 4-deg)*shift(dcp, 4-deg)+shift(dqv, 4-deg)*shift(ddqp,
      4-deg))*fm][deg == 1 & deg == 3, dqv:=(dr^2 + 1)*mp*shift(dcp, 4-deg)
      +(shift(cv, 4-deg)*shift(dcp, 4-deg)+shift(dqv, 4-deg)*shift(ddqp,
      4-deg))*fm][deg != 1 & deg != 3, dqv:=(dr + 1)*mp*shift(dcp, 4-deg)
      +(shift(cv, 4-deg)*shift(dcp, 4-deg)+shift(dqv, 4-deg)*shift(ddqp,
      4-deg))*fm][deg == 1 & deg != 3, dqv:=1*mp*shift(dcp, 4-deg)
      +(shift(cv, 4-deg)*shift(dcp, 4-deg)+shift(dqv, 4-deg)*shift(ddqp,
      4-deg))*fm]