你在比較的項目是不同類別的:性格和日期。 (我得到充滿1的整個矩陣)
試試這個:
mydates <- as.Date(mydates) # then the comparisons will more sensible
它得到一個量化的答案,我使出了使用outer
和重新排列的邏輯有點創建一個矩陣「新」的價值觀,然後將失敗的項目回1 strating值:
myarray2 <-matrix(mycons,
nrow=length(dates), ncol=length(mydates), byrow=TRUE)
myarray2[ outer(dates, mydates, "<=") ] <- 1
myarray2
我嘗試使用mapply
想我可以做這樣的事情從兩個序列通過「並行的項目」,但也沒有辦法,我可以得到「我」索引要抓住。
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, ">")]
這是一個例證通過將相同的條件應用於<-
操作的兩側來使用條件分配。它可以很快。
這是實際數據?或者這是一個簡化版本?因爲正如所寫的,它既快速又可能根本不需要'for'循環,因爲你似乎只是以一種相當直接的方式重新編碼你的數據。 – Thomas
那麼,你需要幫助那個錯誤嗎?如果是這樣,請更新您的問題。或者,你是否想談談如何生成myarray矩陣? – Thomas
@Thomas對不起,我雖然理解你的觀點,但現在我不能讓代碼工作,如果刪除'for'循環。如果你能以不同的方式幫助我生成「myarray」,我將不勝感激。 – nopeva