每2行生成一个升序值矩阵,R中没有for循环

每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

我试图在不使用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")
  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)

df
replicate(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)