R 具有相似名称的多个数据帧

R 具有相似名称的多个数据帧,r,arrays,dataframe,R,Arrays,Dataframe,我需要从名称不同的其他数据帧生成数组或许多数据帧。这需要我做大量的复制粘贴工作。我是否可以使它更干净,但不继续复制和粘贴?下面是我现在所做的许多类似分析案例中的两个例子(我将在问题的末尾提供复制代码),我认为可以用同样的方法使它们更清晰 案例1,使用per_d1、per_d1、per_d3、per_d4、per_d5中的数据创建一个数组 perd <- array(dim=c(7,15,5)) perd [,,1] <- as.matrix(per_d$per_d1) perd [,

我需要从名称不同的其他数据帧生成数组或许多数据帧。这需要我做大量的复制粘贴工作。我是否可以使它更干净,但不继续复制和粘贴?下面是我现在所做的许多类似分析案例中的两个例子(我将在问题的末尾提供复制代码),我认为可以用同样的方法使它们更清晰

案例1,使用per_d1、per_d1、per_d3、per_d4、per_d5中的数据创建一个数组

perd <- array(dim=c(7,15,5))
perd [,,1] <- as.matrix(per_d$per_d1)
perd [,,2] <- as.matrix(per_d$per_d2)
perd [,,3] <- as.matrix(per_d$per_d3)
perd [,,4] <- as.matrix(per_d$per_d4)
perd [,,5] <- as.matrix(per_d$per_d5)

perd您可以尝试以下方法。但不幸的是,代码并不短

案例1

a <- lapply(per_d, as.matrix)
b <- c(a, recursive = TRUE)

pred <- array(b, dim = c(7,15,5))

非常感谢你的帮助。对于案例1,我是否有可能将perd保持为一个三维数组?在拉普拉之后,它变成了完全一样的。另外,如果我只想从peru d中选择几个数据帧,我可以简单地这样做:lapply(peru d,function(x){perd[,c(1:3)]@Keeny Yu在测试它时一定出了问题。我已经对案例1的代码进行了修改。
N <- 1
CS <- 10.141 
S <- seq (7.72,13,0.807) 
t <- 15 
l <- length (S)
m0 <- 100 
exps <- c(0.2, 0.5, 0.9, 1.5, 2) 
sd <- c(0.2, 0.5, 0.8, 1.3, 1.8)

names(sd) <- paste("per", seq_along(sd), sep = "") 
per <- lapply(sd, function(x){ 
  per <- matrix(nrow = length(S)*N, ncol = t+1)
  for (i in 1:dim(per)[1]) {
    for (j in 1:t+1){
      per [,1] <- replicate (n = N, S)
      per [i,j] <- round (abs (rnorm (1, mean = per[i,1], sd =x)),digits=3)
      colnames(per) <- c('physical',paste('t', 1:15, sep = ""))
      per <- as.data.frame (per)
    }
  }
  per <- per [,-1]
  return(per)
}
)  

per_d <- lapply(per, function(x){ 
  per_d <- abs (x - 10.141) 
}
)  
names(per_d) <- paste("per_d", seq_along(sd), sep = "")

gefun <- function (i){
  res <- lapply(exps, function(x){
    g <- as.matrix (m0 * exp (-x * i))
    for (i in 1:l) {
      for (j in 1:t){
        g [i,j] <- abs((round (rnorm(1,mean = g[i,j],sd=3), digits = 3)))
        colnames(g) <- paste('t', 1:ncol(g), sep = "")
        g <- as.data.frame(g)
      }}
    return(g)
  }
  )
}

ge <- lapply(per_d, gefun)
for (i in 1:length(ge)){
names(ge[[i]]) <- paste("g", seq_along(ge), sep = "")
}

dfmak <- function(df1,df2,df3,df4,df5,df6){
  data.frame(stimulus =  c (paste0('S',1:3),'CS+',paste0('S',5:7)),
             phy_dis = S,
             per_dis = c(df1$t1,df1$t2,df1$t3,df1$t4,df1$t5,df1$t6,df1$t7,df1$t8,df1$t9,df1$t10,df1$t11,df1$t12,df1$t13,df1$t14,df1$t15),
             trials = rep(1:15, each = 7),
             response_0.2 = c (df2$t1,df2$t2,df2$t3,df2$t4,df2$t5,df2$t6,df2$t7,df2$t8,df2$t9,df2$t10,df2$t11,df2$t12,df2$t13,df2$t14,df2$t15),
             response_0.5 = c (df3$t1,df3$t2,df3$t3,df3$t4,df3$t5,df3$t6,df3$t7,df3$t8,df3$t9,df3$t10,df3$t11,df3$t12,df3$t13,df3$t14,df3$t15),
             response_0.9 = c (df4$t1,df4$t2,df4$t3,df4$t4,df4$t5,df4$t6,df4$t7,df4$t8,df4$t9,df4$t10,df4$t11,df4$t12,df4$t13,df4$t14,df4$t15),
             response_1.5 = c (df5$t1,df5$t2,df5$t3,df5$t4,df5$t5,df5$t6,df5$t7,df5$t8,df5$t9,df5$t10,df5$t11,df5$t12,df5$t13,df5$t14,df5$t15),
             response_2 = c (df6$t1,df6$t2,df6$t3,df6$t4,df6$t5,df6$t6,df6$t7,df6$t8,df6$t9,df6$t10,df6$t11,df6$t12,df6$t13,df6$t14,df6$t15)
  )
}
a <- lapply(per_d, as.matrix)
b <- c(a, recursive = TRUE)

pred <- array(b, dim = c(7,15,5))
# create empty lists to store the outputs
out <- list()   
name <- list()
                        
for(i in 1:5) {
  a <- per_d[[i]]
  b <- ge[[i]][[1]]
  c <- ge[[i]][[2]]
  d <- ge[[i]][[3]]
  e <- ge[[i]][[4]]         
  f <- ge[[i]][[5]]
  
  arg <- list(a, b, c, d, e, f)
  name[[i]] <- paste0("df_", i)
  
  out[[i]] <- do.call(dfmak, arg)
  
}                                          
        
out <- setNames(out, name)