【问题标题】:How do I print the entries of a foreach loop in R?如何在 R 中打印 foreach 循环的条目?
【发布时间】:2021-04-30 14:50:10
【问题描述】:

我正在尝试与 foreach 并行运行 R 循环。 这个想法是,使用 foreach 调用的函数将从列表中获取某个函数并将其用作另一个函数的参数。

func_list <- c(a(), b(), c())
loop_func <- function(letter){
    obj <- f(parameter = letter)
    return(c(letter, obj)

foreach(val=func_list, .combine='rbind') %dopar% {
    loop_func(val)
} -> result

所以我试图让 loop_func 返回一个输出(在本例中为 obj),以及它用作 f() 函数的参数的函数。但是,我似乎无法将该函数作为字符串。 我试过as.character(substitute(letter)),但这给了我“val”。

有没有直观的获取方式:

"a"    obj

从函数返回?

【问题讨论】:

  • 请提供一个最小的可重现示例,即如果复制到 R 中的代码可以在没有错误的情况下执行。 1.您的func_list 似乎不是函数列表。事实上,它很可能是一个带有这些函数的返回值的向量。如果a() 不返回"a",则loop_func 不可能得到"a"。 2. loop_func 需要关闭 } 并且如果您打算稍后使用 obj 可能应该返回一个列表。 3、f是如何定义的,返回什么?

标签: r foreach


【解决方案1】:

您可以在函数名称列表上使用foreach,并在相关函数上使用get

library(foreach)

loop_func <- function(funcname){
  obj <- f(get(funcname))
  return(list(funcname,obj))}

a <- function(x) x
b <- function(x) 2*x
d <- function(x) 3*x

f <- function(func) {func(1)}

func_list <- c("a", "b", "d")

result <- foreach(f = func_list, .combine='rbind') %dopar% {
  loop_func(f)
}

result

         [,1] [,2]
result.1 "a"  1   
result.2 "b"  2   
result.3 "d"  3 

【讨论】:

  • @Charles Meijer,它回答了你的问题吗?
  • 它确实回答了我的问题,但不适用于我的情况。我认为问题在于我的函数没有返回某个值,例如示例中的 a() 。你不可能知道这一点,因为我没有在我的问题中提到这一点:S。我最终将我的函数列表更改为一个数字范围,在循环中创建了一个函数列表以及一个函数名称字符串列表,然后使用我在 foreach 循环中使用的数字列表进行迭代。所以你确实提供了一个很好的答案,但我的问题不够具体。谢谢你的帮助:D
  • 感谢您的反馈,很高兴您找到了解决方案
猜你喜欢
  • 2018-11-14
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2020-11-25
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多