我正在尝试使用data.table进行完整的笛卡尔联接,但运气不佳.
码:
a = data.table(dt=c(20131017,20131018))
setkey(a,dt)
b = data.table(ticker=c("ABC","DEF","XYZ"),ind=c("MISC1","MISC2","MISC3"))
setkey(b,ticker)
Run Code Online (Sandbox Code Playgroud)
预期产量:
merge(data.frame(a),data.frame(b),all.x=TRUE,all.y=TRUE)
Run Code Online (Sandbox Code Playgroud)
我已经试过merge(a,b,allow.cartesian=TRUE),但它给了我下面的错误- " Error in merge.data.table(a, b, allow.cartesian = TRUE) : A non-empty vector of column names for通过is required."
我正在使用R version 3.0.1 (2013-05-16)最新的data.table套餐.任何帮助将不胜感激!
问候
我试图在我的R代码中加入一些错误处理.
下面的伪代码:
foo = function(X,Y) {
...
return(ret.df);
}
DT = DT[,ret.df := foo(X,Y), by=key(DT)];
Run Code Online (Sandbox Code Playgroud)
目的是检查是否有某种组合X,Y该函数foo会引发错误.如果它确实引发了错误,那么我想在最终结果数据帧中跳过该记录组合.我试过下面没有太多运气:
DT = DT[ , try(ret.df = : foo(X,y));
if(not (class(ref.df) %in% "try-error') ) {
return(ret.df);
}, by = key(DT) ];
Run Code Online (Sandbox Code Playgroud)
我总是可以尝试编写一个包装器foo来进行错误检查,但是我正在寻找一种直接在data.table调用中编写语法的方法.这可能吗?
感谢您的帮助!