簡體   English   中英

使用 R Lapply 和函數參數列表迭代函數

[英]Iterating a Function Using R Lapply and a List of Function Arguments

我有一個函數 MyFun(a,b,c,d),它返回數據框和圖的列表。 參數 a、b、c、d 只是表示“開始日期”、“結束日期”、“當前版本#”和“上一個版本#”的字符串。 為簡潔起見,我將通過名稱 a、b、c、d 來調用參數。

我想使用唯一的參數集運行 MyFun(a, b, c, d) 並將所有輸出存儲到列表中。 為此,我創建了一個列表列表:

arg_set1 <- list(a1,b1,c1,d1)

arg_set2 <- list(a2,b2,c2,d2)

arg_set3 <- list(a3,b3,c3,d3)

arg_sets <- list(arg_set1, arg_set2, arg_set3)

這是我不確定的部分:我正在嘗試使用 Lapply 從 MyFun(a,b,c,d) 獲取輸出列表,使用 arg_sets 中列出的 3 個列表作為我的輸入: output <- lapply( arg_sets,MyFun)

據我了解,上述 lapply 語句不起作用,因為 lapply 無法知道它應該傳遞給 MyFun 的一系列參數包含在 arg_sets[1]、arg_sets[2]、arg_sets[3] 中。 作為替代方案,我還嘗試將我的輸入參數作為數據框傳遞給 lapply,其中包含 a、b、c、d 列,每行包含一組唯一的參數,我希望 lapply 傳遞給 MyFun(a, b ,光盤)。 但是,我遇到了與之前輸入參數列表基本相同的問題; 我無法定義 lapply 將輸入矩陣的每一行作為一組參數傳遞給 MyFun(a,b,c,d)。

任何建議將不勝感激!

使用do.call

output <- lapply(arg_sets, function(x) do.call(my_fun, x))

看這個簡單的例子,

my_fun <- function(x, y , z) {
   x + y + z
}

arg_sets <- list(a = as.list(1:3), b= as.list(4:6))
lapply(arg_sets, function(x) do.call(my_fun, x))

#$a
#[1] 6

#$b
#[1] 15

如果不是列表,而是創建一個參數向量,則可以將上述函數更改為

arg_set1 <- c(a1,b1,c1,d1)
arg_set2 <- c(a2,b2,c2,d2)
arg_set3 <- c(a3,b3,c3,d3)
arg_sets <- list(arg_set1, arg_set2, arg_set3)

lapply(arg_sets, function(x) do.call(my_fun, as.list(x)))

暫無
暫無

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

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