比較している項目は、文字と日付の異なるクラスです。(1で満たされたマトリックス全体を取得します。)
これを試して:
mydates <- as.Date(mydates) # then the comparisons will more sensible
ベクトル化された答えにouter
たどり着き、ロジックを少し再配置して「新しい」値のマトリックスを作成し、失敗した項目を 1 の評価値に戻します。
myarray2 <-matrix(mycons,
nrow=length(dates), ncol=length(mydates), byrow=TRUE)
myarray2[ outer(dates, mydates, "<=") ] <- 1
myarray2
2 つのシーケンスから「並列アイテム」を渡すようなことができると考えて使用してみmapply
ましたが、「i」インデックスを取得する方法はありません。
mapply(function(x,y) {myarray[i , ] <- y[x>dates]} , mydates, mycons)
for ループの典型的な作り直し: ほとんどの場合、for ループをsapply
操作として再構築できます。
sapply( 1:length(mycons), function(idx){
myarray[which(dates>mydates[idx]),idx] <- mycons[idx]; myarray[,idx]})
誰かがsweep
これを行う操作を作成できると思いますが、まだよく理解しsweep
ていません。
@Ferdinand.Kraft が myarray と同じ長さのベクトルを構築することを提案しているが、パラダイム内にとどまるというパスを取りたい場合は、次のobj[cond] <- value
ようにします。
myarray[ outer(dates, mydates, ">") ] <-
rep(mycons, each=length(dates) )[ outer(dates, mydates, ">")]
これは、操作の両側に同じ条件を適用して条件付き割り当てを使用する例です<-
。それはかなり速いかもしれません。