每2行生成一个升序值矩阵,R中没有for循环
我试图在不使用for循环的情况下生成此矩阵(以加快处理时间): 我一直在尝试应用函数replicate()和do.call()。我最终得到了以下代码:每2行生成一个升序值矩阵,R中没有for循环,r,matrix,rbind,replicate,rep,R,Matrix,Rbind,Replicate,Rep,我试图在不使用for循环的情况下生成此矩阵(以加快处理时间): 我一直在尝试应用函数replicate()和do.call()。我最终得到了以下代码: a = 10 # Number of increments n1 = 100 # Sample size m.fn <- function(n1, a) { b <- matrix(rep(n1), nrow = 2, ncol = 3) rownames(b) <- c("y0", "y1
a = 10 # Number of increments
n1 = 100 # Sample size
m.fn <- function(n1, a) {
b <- matrix(rep(n1), nrow = 2, ncol = 3)
rownames(b) <- c("y0", "y1")
c <- do.call(rbind, replicate(a, b, simplify=FALSE))
colnames(c) <- c("Module 1", "Module 2", "Module 3")
return(c)
}
作为参考,这是我用来创建所需矩阵的代码,涉及For循环:
n.fn <- function(n1, a) {
b <- matrix(rep(1, 3), nrow = 1, ncol = 3)
for (no in 1:a) {
c <- matrix(rep(n1 * no, 6), nrow = 2, ncol = 3)
rownames(c) <- c("y0", "y1")
b <- rbind(b, c)
}
b <- as.matrix(b[-1, 1:3])
colnames(b) <- c("Module 1", "Module 2", "Module 3")
return(b)
}
n <- n.fn(n1, a)
n.fn您只需生成从20到400的序列,重复它的次数与列的次数相同,并在矩阵中排列:
df <- matrix(rep(rep(seq(from = 20, to = 400, by = 20), each = 2), times = 3), ncol = 3)
dfreplicate(3,lapply(seq(20200,20),rep,2)%>%unlist)
谢谢您的回复。这对我没用。我得到的响应是:>replicate(3,lappy(seq(20,200,20),rep,2)%%>%unlist)lappy中的错误(seq(20,200,20),rep,2)%%>%unlist:找不到函数“%%>%”。您需要加载安装并使用库dplyr
,以利用管道。或者,只需运行replicate(3,unlist(lappy(seq(20200,20),rep,2))
。太棒了!谢谢你,亚当。%>%现在可以工作了,您的代码也可以完美地工作。它会生成我想要的列表!谢谢你的回复。这确实会生成一个数据帧/矩阵,但不是我要找的那个。我是一个数据帧/矩阵,它有两行20,然后是两行40。每一行被称为“y0”,每一行被称为“y1”。我已经把它包括在我原来的帖子的顶部。您的建议虽然有用,但每次都会生成20行升序,名称为y1、y2、y3etc@Matthew博格检查编辑请,我相信我已经解决了问题谢谢误用。您的建议和编辑工作非常出色!我也感谢你回来编辑你的建议!
Module 1 Module 2 Module 3
y0 20 20 20
y1 20 20 20
y0 60 60 60
y1 80 80 80
y0 100 100 100
y1 120 120 120
y0 140 140 140
y1 160 160 160
y0 180 180 180
y1 200 200 200
y0 220 220 220
y1 240 240 240
y0 260 260 260
y1 280 280 280
y0 300 300 300
y1 320 320 320
y0 340 340 340
y1 360 360 360
y0 380 380 380
y1 400 400 400
n.fn <- function(n1, a) {
b <- matrix(rep(1, 3), nrow = 1, ncol = 3)
for (no in 1:a) {
c <- matrix(rep(n1 * no, 6), nrow = 2, ncol = 3)
rownames(c) <- c("y0", "y1")
b <- rbind(b, c)
}
b <- as.matrix(b[-1, 1:3])
colnames(b) <- c("Module 1", "Module 2", "Module 3")
return(b)
}
n <- n.fn(n1, a)
df <- matrix(rep(rep(seq(from = 20, to = 400, by = 20), each = 2), times = 3), ncol = 3)
df <- replicate(3, unlist(lapply(seq(20,200,20), rep, 2) ))
colnames(df) <- paste("Module", 1:ncol(df))
rownames(df) <- rep(paste0("y", 0:1), nrow(df)/2)