应用用户定义的函数,不带for循环

问题描述 投票:0回答:1

我正在尝试使用自定义函数来解决参数的多个排列。

我一次调用函数(yield.n)时工作正常,例如:yield.n(naa,F,M,S,Y)naa是一个大数据帧(750000 x 17),F,M和Y是数字对象,S是向量。

我想用这个函数来解决Y的各种值。我尝试了apply系列的多个排列,但是我无法提供功能代码。如果我为Y的值(代码打击)运行一个for循环,则可以正确解决,但速度很慢。

yn.out <- NULL                                        
    for(yr in 50:150){                               
           yr.out <- yield.n(naa, ssf, M, S, yr)         
           yr.out <- cbind(yr.out, yr)                       
           yn.out <- rbind(yn.out, yr.out)
        }

yn.out <- as.data.frame(yn.out)

我如何获得一个应用函数来解决这个问题,以解决Y的多个值?

该函数的代码如下(但我不确定这与当前问题有关)。

function(naa, F, M, S, Y){
    yr <- Y
    naa.lci <- aggregate(naa[, 1:16], list(naa$year),
                         "quantile", probs = .05)
    naa.m   <-  aggregate(naa[, 1:16], list(naa$year),
                          "quantile", probs = .5)
    naa.uci <- aggregate(naa[, 1:16], list(naa$year),
                         "quantile", probs = .9)
    yield.n.lci <- round(sum(((F*S)/(M + (F*S))) * (1- exp(-M-(F*S))) *
                             naa.lci[yr, 2:17]))
    yield.n.m   <- round(sum(((F*S)/(M + (F*S))) * (1- exp(-M-(F*S))) *
                             naa.m[yr, 2:17]))
    yield.n.uci <- round(sum(((F*S)/(M + (F*S))) * (1- exp(-M-(F*S))) *
                             naa.uci[yr, 2:17]))
    yield.out <- cbind(yield.n.lci, yield.n.m, yield.n.uci)
    return(yield.out)
}
r apply user-defined-functions
1个回答
1
投票

尝试以下操作:

yn.out <- do.call(rbind, lapply(50:150, function(y) 
                  cbind(yield.n(naa, F, M, S, y), yr = y)))

或使用purrr::map_df

yn.out <- purrr::map_df(50:150, ~cbind(yield.n(naa, F, M, S, .x), yr = .x))
© www.soinside.com 2019 - 2024. All rights reserved.