你在比较的项目是不同类别的:性格和日期。 (我得到充满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