R 从执行顺序操作的向量创建三角形矩阵

R 从执行顺序操作的向量创建三角形矩阵,r,for-loop,matrix,vector,conditional,R,For Loop,Matrix,Vector,Conditional,我一直在努力解决以下问题 假设我有以下向量: aux1您可以尝试以下方法(在@thela的慷慨帮助下) res0],-1),`-`) is.na(res)使用sapply和ifelse: sapply(head(vv[vv>0],-1),function(y)ifelse(vv-y>0,vv-y,NA)) 在正值上循环(还应删除最后一个元素),然后从原始向量中提取每个值。我使用ifelse替换负值 # [,1] [,2] [,3] [,4] [,5] # [1,]

我一直在努力解决以下问题

假设我有以下向量:


aux1您可以尝试以下方法(在@thela的慷慨帮助下)

res0],-1),`-`)

is.na(res)使用
sapply
ifelse

sapply(head(vv[vv>0],-1),function(y)ifelse(vv-y>0,vv-y,NA))
在正值上循环(还应删除最后一个元素),然后从原始向量中提取每个值。我使用
ifelse
替换负值

#       [,1] [,2] [,3] [,4] [,5]
#  [1,]   NA   NA   NA   NA   NA
#  [2,]   NA   NA   NA   NA   NA
#  [3,]   NA   NA   NA   NA   NA
#  [4,]   NA   NA   NA   NA   NA
#  [5,]    1   NA   NA   NA   NA
#  [6,]   NA   NA   NA   NA   NA
#  [7,]    3    2   NA   NA   NA
#  [8,]   NA   NA   NA   NA   NA
#  [9,]   NA   NA   NA   NA   NA
# [10,]    6    5    3   NA   NA
# [11,]    7    6    4    1   NA
# [12,]    8    7    5    2    1

你已经很好的答案的变化:
out 0],-1),`-`);replace(out,out@thelatemail)非常好。我做了相应的修改。在如何避免在所有组合上运行它的问题上,我伤了脑筋。
res <- outer(aux1, head(aux1[aux1 > 0], -1), `-`)
is.na(res) <- res <= 0 
#       [,1] [,2] [,3] [,4] [,5]
#  [1,]   NA   NA   NA   NA   NA
#  [2,]   NA   NA   NA   NA   NA
#  [3,]   NA   NA   NA   NA   NA
#  [4,]   NA   NA   NA   NA   NA
#  [5,]    1   NA   NA   NA   NA
#  [6,]   NA   NA   NA   NA   NA
#  [7,]    3    2   NA   NA   NA
#  [8,]   NA   NA   NA   NA   NA
#  [9,]   NA   NA   NA   NA   NA
# [10,]    6    5    3   NA   NA
# [11,]    7    6    4    1   NA
# [12,]    8    7    5    2    1
sapply(head(vv[vv>0],-1),function(y)ifelse(vv-y>0,vv-y,NA))
#       [,1] [,2] [,3] [,4] [,5]
#  [1,]   NA   NA   NA   NA   NA
#  [2,]   NA   NA   NA   NA   NA
#  [3,]   NA   NA   NA   NA   NA
#  [4,]   NA   NA   NA   NA   NA
#  [5,]    1   NA   NA   NA   NA
#  [6,]   NA   NA   NA   NA   NA
#  [7,]    3    2   NA   NA   NA
#  [8,]   NA   NA   NA   NA   NA
#  [9,]   NA   NA   NA   NA   NA
# [10,]    6    5    3   NA   NA
# [11,]    7    6    4    1   NA
# [12,]    8    7    5    2    1