为什么用 by 强制 data.table 中的列不起作用,而没有警告却强制工作?

Why does coercing a column in a data.table with by not work while coercing without does work without warning?

下面我用两种方式做同样的操作。第一个不起作用,而第二个起作用。我想知道为什么?我无法通过 google.

在 data.table 文档或其他地方找到这个问题的答案
SOtable <- data.table(testInt=c(1:100))
SOtable[,testInt := as.double(testInt), by=1:nrow(SOtable)]
##Error in `[.data.table`(SOtable, , `:=`(testInt, as.double(testInt)),  : 
## Type of RHS ('double') must match LHS ('integer'). To check and coerce would impact performance too much for the fastest cases. Either change the type of the target column, or coerce the RHS of := yourself (e.g. by using 1L instead of 1)
SOtable[,testInt := as.double(testInt)]

尝试这个的原因是因为我想对每一行的大 data.table 中的列进行一些操作,但是一旦我使用 by 我就得到了 LHS/RHS 错误。但是当我打字的时候我在想:"Maybe I should have used some apply function for this instead?"

@Roland 的回答:

在第一个示例中,您替换了整列,因此变量类型不是一个因素。 当使用 by 时,每个值在计算时都会写入列中,因此如果类型不同,它将尝试将双精度变量写入(在本例中)到整数列中,这是行不通的。