簡體   English   中英

lapply是否有序地應用該功能?

[英]Does lapply apply the function orderly?

我有一個功能列表

functions <- list(f1, f2, f3, ...)

我需要通過所有函數傳遞一個對象x 我可以這樣做:

for (fun in functions){
  fun(x)
}

函數不返回任何內容,但它們的順序很重要,即f1(x)必須在f2(x)之前應用。

因此,我正在考慮使用lapply

lapply(functions, function(fun) fun(x))

但我不知道lapply是否lapply應用列表functions的第一個函數,或者它是否遵循另一個訂單。 通過循環,我保證訂購,但它可能會變慢。

任何想法?

問題“傳遞x到......”的措辭表明你認為這將完成一個“組合”,即將函數串行應用於先前應用程序的結果。 您提出的解決方案都不會這樣做,盡管您可以重新設置for循環來執行此操作。 看一下我在無恥地引用的?funprog幫助頁面:

## Iterative function application:
Funcall <- function(f, ...) f(...)
## Compute log(exp(acos(cos(0))
Reduce(Funcall, list(log, exp, acos, cos), 0, right = TRUE)

for循環版本的結果與Reduce版本進行比較:

> flist <- list(log, exp, acos, cos)
> arg <- 0; for (f in flist) {arg <- f(arg)}
> arg
[1] 6.123234e-17
> Funcall <- function(f, ...) f(...)
> ## Compute log(exp(acos(cos(0))
> Reduce(Funcall, list(log, exp, acos, cos), 0, right = TRUE)
[1] 0

這表明<something>實際上正在發生:

arg <- 0; for (f in flist) {arg <- f(arg);cat(arg,"\n")}
-Inf 
0 
1.570796 
6.123234e-17 

但它們並不相同,因為right=TRUE實際上顛倒了應用的順序,並解釋了最終結果中的微不足道的差異。 相比:

arg <- 0; for (f in rev(flist)) {arg <- f(arg);cat(arg,"\n")}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM