为什么在没有警告的情况下强制执行而没有工作时强制执行data.table中的列?

时间:2015-01-08 15:52:14

标签: r data.table

下面我以两种方式做同样的操作。第一个不起作用,而第二个起作用。我想知道为什么?我无法通过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)]

尝试这个的原因是因为我想对每一行的大数据表中的列进行一些操作,但是一旦我使用by,我就会得到LHS / RHS错误。但是当我输入这个时,我正在思考:&#34;也许我应该使用一些apply函数代替?&#34;

1 个答案:

答案 0 :(得分:0)

@Roland回答:

在第一个示例中,您替换整个列,因此变量类型不是一个因素。 当使用by时,每个值在计算时都会写入列中,因此如果类型不同,它将尝试将(在这种情况下)双变量写入整数列,这不会起作用。