2017-06-12 59 views
0

我在r中创建了一个函数,用于计算必需的重复次数。我的问题是,我需要为矩阵中的增量和西格玛赋值,然后添加到函数中。Rmarkdown中的Matrix问题

required.replicates <- function(delta, sigma, z.alpha = 1.959964, 
    z.beta=0.8416212) 
{ 
r.exact <- (2*(z.alpha + z.beta)^2)*(sigma/delta)^2 
result <- list(delta, sigma, z.alpha, z.beta) 
names(result) <- c("delta", "sigma", "z.alpha", "z.beta") 
r.integer <- ceiling(r.exact) 
replicate.output <- list(result, r.exact, r.integer) 
names(replicate.output) <- c("result","r.exact","r.integer") 
return(replicate.output) 
} 

sigma.vec <- c(2,4,6,8,10,12) 
delta.vec <- c(1,2,5,8,10) 
sigma.mat <- matrix(rep(sigma.vec,times=length.s), nrow =length.s, 
    byrow=TRUE) 
delta.mat <- matrix(rep(delta.vec,times=length.s), ncol = length.s, 
    byrow=FALSE) 
required.replicates(delta= delta.mat, sigma=sigma.mat) 

错误西格玛/△:非一致的数组

我不知道为什么我收到错误消息。

+0

你想要什么? 'sigma.mat'是一个'(10 * 6)'矩阵,而'delta.mat'是'(5 * 10)',所以我不清楚'sigma.mat/delta.mat'应该产生什么。 – herbaman

+0

对不起。我需要做的是将所有的值在sigma.vec和delta.vec中通过required.replicates中的公式。 –

回答

1

sigma.vecdelta.vec具有不同的长度,因此sigma.matdelta.mat具有不同的尺寸,所以产生sigma.mat/delta.mat错误。

+0

作业只是希望通过重复sigma.vec的行和delta.vec的列来覆盖这30个可能的组合 –

0

首先,它看起来像你缺少length.s,你正在使用它来存储sigma.vecdelta.vec的长度。我会的长度保存为单独瓦尔:

length.s <- length(sigma.vec) 
length.d <- length(delta.vec) 

你的主要问题non-conformable arrays出现的事实,sigma.vecdelta.vec的长度不同,从而导致不同的matrix维度来干。添加一个元素delta.vec或从sigma.vec删除一个,我认为你的功能应该工作。