通过函数输出将矩阵填充到循环中

时间:2019-02-01 03:47:56

标签: r loops matrix

一个函数从两个向量(alpha和beta)中获取两组值。我需要将函数输出的值放在大小为alpha x beta的矩阵中。该函数计算功率值。我感谢您的帮助。我需要一个5x5的矩阵。到目前为止,我已经尝试了以下代码:

alpha = c(0.01,0.05,0.10,0.20)
beta = c(0.50,0.60,0.70,0.80,0.90)
pwrmx <- matrix(data=NA, nrow=alpha, ncol=beta)
for (a in alpha){

  for (b in beta){

    pwr <- power.prop.test(n=NULL, p1=0.25, p2=0.4, sig.level = a, power = b)
    print(pwr$n)
    }

}

2 个答案:

答案 0 :(得分:1)

您快到了,请参阅评论:

alpha = c(0.01,0.05,0.10,0.20)
beta = c(0.50,0.60,0.70,0.80,0.90)

# nrow and ncol depends on the length of alpha and beta
pwrmx <- matrix(data=NA, nrow=length(alpha), ncol=length(beta))

# iterate over the length so that you can use it to assign back at the correct index in matrix
for (i in 1:length(alpha)){

    for (j in 1:length(beta)){

        # as you are interested in the number n from the power analysis
        pwrmx[i,j] <- (power.prop.test(n=NULL, p1=0.25, p2=0.4, sig.level = alpha[i], power = beta[j]))$n

                             }

                          }

pwrmx
# .        [,1]      [,2]      [,3]      [,4]     [,5]
#[1,] 129.38048 155.72219 186.60552 226.29474 287.6656
#[2,]  74.90845  95.24355 119.70057 151.86886 202.8095
#[3,]  52.75810  70.01993  91.18885 119.50901 165.1130
#[4,]  32.02629  45.74482  63.12283  87.00637 126.4575

答案 1 :(得分:0)

不需要循环,您可以创建一个函数来执行计算

func <- function(x, y) power.prop.test(n=NULL, p1=0.25, p2=0.4, sig.level = x, power = y)$n

然后使用outer并将函数(func)应用于alphabeta的每种组合

outer(alpha, beta, Vectorize(func))

#          [,1]      [,2]      [,3]      [,4]     [,5]
#[1,] 129.38048 155.72219 186.60552 226.29474 287.6656
#[2,]  74.90845  95.24355 119.70057 151.86886 202.8095
#[3,]  52.75810  70.01993  91.18885 119.50901 165.1130
#[4,]  32.02629  45.74482  63.12283  87.00637 126.4575