使用dcast函数时出现多个value.var参数的错误

3

我一直在学习如何使用data.table,我使用了??dcast中的示例,其中使用了以下示例:

dt = data.table(x=sample(5,20,TRUE), y=sample(2,20,TRUE), 
                z=sample(letters[1:2], 20,TRUE), d1 = runif(20), d2=1L) 

那么

# multiple value.var
dcast(dt, x + y ~ z, fun=sum, value.var=c("d1","d2"))

我遇到了错误:

Error in .subset2(x, i, exact = exact) : subscript out of bounds In addition: Warning message: In if (!(value.var %in% names(data))) { :
the condition has length > 1 and only the first element will be used

这是我的R版本信息:

> version
               _                           
platform       x86_64-w64-mingw32          
arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          3                           
minor          2.2                         
year           2015                        
month          08                          
day            14                          
svn rev        69053                       
language       R                           
version.string R version 3.2.2 (2015-08-14)
nickname       Fire Safety

3
无法在 R 3.2.3data.table_1.9.6 中重现该错误。 - akrun
4
在 R 3.2.3 版本和 data.table 1.9.7 库中,我未发现任何错误。顺便提一下,多个 value.var 功能是在 1.9.6 版本中添加的:https://github.com/Rdatatable/data.table - Frank
1个回答

9
我也遇到了同样的问题,非常令人沮丧。
问题在于,你需要“强制”使用data.table的dcast函数,否则它将使用reshape2函数。
唯一成功的方法是按照以下方式运行dcast:
# multiple value.var
data.table::dcast(dt, x + y ~ z, fun=sum, value.var=c("d1","d2"))

这也可以通过仅加载 data.table 库或在 reshape2 之前加载 data.table 来避免。这个问题特别恼人,因为只有在你已经加载了 reshape2 然后 加载了 data.table 的情况下才会出现,这意味着通常不是问题。 - Mako212
这也是正确的。如果函数掩盖了其他函数,包加载顺序可能会引起许多问题... 这可能令人沮丧。 - K.J.J.K
我先加载了data.table,然后是reshape2,但问题仍然存在,@K.J.J.K的答案是我目前的选择。 - Ricardo Andrade
@K.J.J.K 你救了我的命 - isthisthat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接