2017-08-09 80 views
1

在我的R函数下面,我想知道如何改变我的代码,使我可以从我的fun函数中获得pe?现在,fun只输出LU在R中的循环结构中有一个函数输出两个量?

P.S.当然,我想保持现在的功能正常,因此replicate也可能需要更改,因为除了LU之外还有fun输出pe

CI.bi = function(n, p, n.sim){ 

fun <- function(n1 = n, p1 = p){ 
x <- rbinom(1, size = n1, prob = p1) 
pe <- x/n1 
res <- binom.test(x, n1, p1)[[4]] 
c(L = res[1], U = res[2]) 
} 

sim <- t(replicate(n.sim, fun())) 

y = unlist(lapply(1:n.sim, function(x) c(x, x))) 

plot(sim, y, ty = "n", ylab = NA, yaxt = "n") 

segments(sim[ ,1], 1:n.sim, sim[ ,2], 1:n.sim, lend = 1) 

} 
# Example of use: 
CI.bi(n = 15, p = .5, n.sim = 3) 

回答

1

你可以有fun()回报pe作为返回矢量的附加元素。

稍后参考sim时,只需指定要使用的列。我相信下面的代码示例复制您当前的功能,但具有pe作为附加输出fun()

CI.bi = function(n, p, n.sim){ 

    fun <- function(n1 = n, p1 = p){ 
    x <- rbinom(1, size = n1, prob = p1) 
    pe <- x/n1 
    res <- binom.test(x, n1, p1)[[4]] 
    c(L = res[1], U = res[2], pe=pe) 
    } 

    sim <- t(replicate(n.sim, fun())) 

    y = unlist(lapply(1:n.sim, function(x) c(x, x))) 

    plot(sim[,1:2], y, ty = "n", ylab = NA, yaxt = "n") 

    segments(sim[ ,1], 1:n.sim, sim[ ,2], 1:n.sim, lend = 1) 

} 

CI.bi(n = 15, p = .5, n.sim = 3) 
相关问题