我正在尝试为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
答案 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]