R 如何使用*apply对不同的数据调用函数,其中输出是list,输入是2x2矩阵的list?

R 如何使用*apply对不同的数据调用函数,其中输出是list,输入是2x2矩阵的list?,r,apply,lapply,sapply,tapply,R,Apply,Lapply,Sapply,Tapply,我有10次模拟的数据,存储为列表。我想用这个数据调用函数FUN1,而不需要重复代码10次。FUN1的输出是模型参数的值,因此: $theta=5 $Theta= 0.5 $pi_1 = 0.6 $pi_2 = 0.4 $loglik_1 = 123.6 $loglik_2 = 23.56 因此,当我将FUN1的输

我有10次模拟的数据,存储为列表。我想用这个数据调用函数
FUN1
,而不需要重复代码10次。
FUN1
的输出是模型参数的值,因此:

               $theta=5
               $Theta= 0.5
               $pi_1 = 0.6
               $pi_2 = 0.4 
               $loglik_1 = 123.6
               $loglik_2 = 23.56 
因此,当我将
FUN1
的输出与10次运行中的一次匹配时,它是如何工作的。我希望所有运行的输出都不需要为每次运行重新安装我的函数

我知道我们可以在R中使用循环族函数,例如
lappy
(列表)或
tapply
(向量)函数。我两个都试过了,但都不起作用

以下是我的数据:

   library(VineCopula)
   library(copula)
   Runs = 10
   Saveas = vector(mode = "list", length = Runs)
   pb <- txtProgressBar(min = 0, max = Runs, style = 3)

   for(j in 1:Runs) {
     setTxtProgressBar(pb, j)
     N=2000
     dim = dim
     U = runif(N, min=0,max=1)
     X = matrix(NA, nrow=N, ncol=2)

     inds <- U < 0.7

     X[inds, ]  <- rCopula(sum(inds),
                    claytonCopula(1, dim=2))

     X[!inds, ] <- rCopula(N - sum(inds),
                    frankCopula(4, dim=2))
     Saveas[[j]] = X
   }
库(连接函数)
库(copula)
运行次数=10
Saveas=vector(mode=“list”,length=Runs)

pb我想
dim
sim\u fun
应该是1。因为,我没有数据或库安装,这个答案是一个未经验证的职位。但是,它将帮助您从这里找到解决方案

sim_fun <- function( N )
{
  U=runif(N, min=0,max=1)
  inds <- U < 0.7
  X <- matrix(NA, nrow = N, ncol = 2)
  X[inds, 1:2] <- rCopula(sum(inds), claytonCopula(1, dim=2))
  X[!inds, 1:2] <- rCopula(N - sum(inds), frankCopula(4,dim=2))
  return( X )
}

set.seed(1L)  # set state of random number generator
sim_data <- replicate( n = 10, sim_fun( N = 2000 ))  # get simulated data 10 times

# apply EM function on the simulated data
apply( sim_data, 3, function( x ) EM_mixture_copula(data =  x,
                                                    pi_1 = pi_1,
                                                    pi_2=pi_2,
                                                    theta = theta, 
                                                    Theta=Theta, 
                                                    tol = .00001,
                                                    maxit = 1000))

<代码> SIMOFAY,你能说出<代码> x>代码>是什么吗?x是我的数据(数据重复10次)。10个模拟的所有运行都被保存为列表。Saveas[[j])=席认为你的数据在<代码> Saveas < /代码>。您需要定义一个函数,并将其与lappy一起使用。但是
FUN1
不是一个函数。我想你的意思是
FUN1,我绝对会的。
    > result <- tapply(X,FUN1,simplify = T)
    Error in tapply(X, FUN, simplify = T) : arguments must have same length.

    > Result <– lapply(X,FUN1)
    Error in get(as.character(FUN), mode = "function", envir = envir) : object 'F' of mode 'function' was not found. 
   xx <-            

        rCopula(N=4 ,claytonCopula(0.5))
            xx
                   [,1]        [,2]
      [1,] 0.6269311043 0.229429156
      [2,] 0.3257583519 0.268244546
      [3,] 0.7446442267 0.436335203
      [4,] 0.3186246504 0.163209827
sim_fun <- function( N )
{
  U=runif(N, min=0,max=1)
  inds <- U < 0.7
  X <- matrix(NA, nrow = N, ncol = 2)
  X[inds, 1:2] <- rCopula(sum(inds), claytonCopula(1, dim=2))
  X[!inds, 1:2] <- rCopula(N - sum(inds), frankCopula(4,dim=2))
  return( X )
}

set.seed(1L)  # set state of random number generator
sim_data <- replicate( n = 10, sim_fun( N = 2000 ))  # get simulated data 10 times

# apply EM function on the simulated data
apply( sim_data, 3, function( x ) EM_mixture_copula(data =  x,
                                                    pi_1 = pi_1,
                                                    pi_2=pi_2,
                                                    theta = theta, 
                                                    Theta=Theta, 
                                                    tol = .00001,
                                                    maxit = 1000))