R 如何使用*apply对不同的数据调用函数,其中输出是list,输入是2x2矩阵的list?
我有10次模拟的数据,存储为列表。我想用这个数据调用函数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的输
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))