我需要创建一个方阵的基础上的可变长度的向量,其中向量的索引只填充上三角形,而不循环向量元素。
我试了下面的R代码:
# example vector (could be longer or shorter!)
v <- letters[1:8]
# calculate dimensions of square matrix
n <- ceiling((-1 + sqrt(1 + 8 * length(v))) / 2)
# create empty matrix
m <- matrix(NA, nrow=n, ncol=n)
# populate the matrix
m[lower.tri(m, diag=TRUE)] <- 1:length(v)
m <- t(m)
字符串
得到的矩阵看起来是这样的:
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] NA 5 6 7
[3,] NA NA 8 1
[4,] NA NA NA 2
型
如何填充矩阵,使上三角形的那部分不需要循环向量索引元素?
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] NA NA 5 6
[3,] NA NA NA 7
[4,] NA NA NA 8
型
- 无载体元件回收
- 使用正方形矩阵的完整维度(列/行)(最大化左下角的“NA块”)
谢谢你的帮助!
3条答案
按热度按时间u0njafvf1#
像这样的吗
字符串
测试长度为14的向量:
型
qqrboqgw2#
也许你可以试试
字符串
这给了
型
1wnzp6jl3#
选择一个非递增整数n-向量x,使得1 <= x <= n:1且sum(x)等于length(v)。x[i]表示结果矩阵的第i行中非NA元素的数量。
我们通过使用CVXR来形成凸优化问题,使得任何可行值都可以提供。当定义下面的问题时,xval是产生的x的最终值。它找到的解是c(4,2,1,1),但由于问题没有很好地定义,c(3,2,2,1)将是另一个有效的解,如果需要进一步约束解,我们可以添加额外的约束。
给定xval,形成逻辑矩阵m,其类似于结果的转置,并使用TRUE显示哪些条目是非NA的。由于R逐列存储矩阵,因此更容易填充转置。最后填充它,然后转置得到结果M。
字符串