为什么R将参数“double”强制转换为逻辑?[关闭]

q3qa4bjr  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(98)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由一个错字或一个无法再复制的问题引起的。虽然类似的问题可能是on-topic在这里,但这个问题的解决方式不太可能帮助未来的读者。
昨天关门了。
Improve this question
我有一个包含df$a列的大型 Dataframe ,其中包含3个可能的值:(0,1,NA...)class(df$a) - numeric
我定义了一个新变量,用于标识至少有一行包含df$a >0的组。

df[,b:=+(any(a,na.rm=TRUE)>0),by=group]

我期望df$b为0或1,但R返回TRUE和FALSE,并警告“强制类型“double”的参数为逻辑”。
我试着用ifelsemax(a,na.rm=TRUE)>0any(a,na.rm=TRUE)==1等写同样的代码,但所有的代码都返回TRUE和FALSE,而不是1和0。
为什么会发生这种情况?

nue99wik

nue99wik1#

正确的语法是

df[,b:=+(any(a>0, na.rm=TRUE)), by=group]

如果你执行any(c(1,3,5)),你会得到同样的错误。any需要逻辑值,而不是数字(Double)值,所以它会将1,3和5强制为逻辑值并抛出警告。相反,如果你执行any(c(1,3,5) > 4),你现在有一个比较any()>将返回TRUE或FALSE,所以不会返回警告。
为了将TRUE/FALSE转换为1/0,可以使用一元运算符+
测试用

df <- data.table(a=c(1, 1, NA, 0, NA, 0), group=c(1, 1, 1, 2, 2, 2))

相关问题