2017-08-09 75 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) 
相關問題