这里有两种方法可以从lapply 的输出创建matrix,一种使用rbind,另一种使用unlist
set.seed(7)
c1 <- c(2,5,4,3,4)
l1 <- lapply(c1,
function(x, y) head(c(rnorm(x), rep(NA, y)), y),
y = max(c1))
m1 <- matrix(unlist(l1),
ncol = max(c1),
byrow = TRUE)
m2 <- do.call(rbind, l1)
# set row names
rownames(m1) <- c1
rownames(m2) <- c1
[,1] [,2] [,3] [,4] [,5]
2 2.2872472 -1.1967717 NA NA NA
5 -0.6942925 -0.4122930 -0.9706733 -0.9472799 0.7481393
4 -0.1169552 0.1526576 2.1899781 0.3569862 NA
3 2.7167518 2.2814519 0.3240205 NA NA
4 1.8960671 0.4676805 -0.8938007 -0.3073283 NA
这也可以使用sapply 一步完成。但是,与上述相比,输出是转置的。可以使用t,但如果矩阵很大,就会变得昂贵。
m3 <- sapply(c1,
function(x, y) head(c(rnorm(x), rep(NA, y)), y),
y = max(c1))
colnames(m3) <- c1
这是一个基于条件有条件地设置matrix 值的示例:
t1 <- 0.59
m1[m1 > t1] <- t1
m1[m1 < t1] <- 0
[,1] [,2] [,3] [,4] [,5]
2 0.59 0.00 NA NA NA
5 0.00 0.00 0.00 0 0.59
4 0.00 0.00 0.59 0 NA
3 0.59 0.59 0.00 NA NA
4 0.59 0.00 0.00 0 NA