管理R中的矢量化功能的输出



i具有称为vec(下图)的Vectorize D功能。我的目标是能够获得该功能的输出列表。也就是说,当我运行该函数时,我将能够将函数调用作为对象(例如I),然后通过使用I$来子集,在这种情况下(以下是第一个运行函数vec):

I = vec(L = .3, U = .6, level = seq(.5, .95, .1)) ; I$alpha ; I$beta

考虑到使用Vectorize,这是否可以?(非常感谢您的专业知识)

这是R函数:

vec = Vectorize(function(L, U, level = .95){
p1 = (1 - level)/2
p2 = 1 - p1
f.beta <- function(alpha, beta, x, lower = 0, upper = 1){
 p <- pbeta((x-lower)/(upper-lower), alpha, beta)
 log(p/(1-p)) }
delta <- function(fit, actual) sum((fit-actual)^2)
objective <- function(theta, x, prob, ...) {
ab <- exp(theta)
fit <- f.beta(ab[1], ab[2], x, ...)
return (delta(fit, prob)) }
x.p <- (function(p) log(p/(1-p)))(c(p1, p2))
sol <- nlm(objective, log(c(1e1, 1e1)), x = c(L, U), prob = x.p, lower = 0, upper = 1, typsize = c(1, 1), fscale = 1e-12, gradtol = 1e-12)
parm <- as.numeric(exp(sol$estimate))
list(alpha = parm[[1]], beta = parm[[2]])
}, c("L", "U", "level"), SIMPLIFY = FALSE)

该函数已经矢量化,但是输出在list中。因此,我们循环浏览list元素以提取" alpha"one_answers" beta"组件

sapply(I, '[[', 'alpha')
#[1]  2.371449  3.562465  5.278213  7.939884 12.918233
sapply(I, '[[', 'beta')
#[1]  2.863406  4.336959  6.461091  9.757192 15.922938

请注意,输出可以简化为具有两个行的矩阵

simplify2array(I)

或两列matrix

do.call(rbind, I)

最新更新