【问题标题】:r calling variables from listr 从列表中调用变量
【发布时间】:2020-06-13 09:14:07
【问题描述】:

我希望在当前问题上找到一些帮助。我编写了一个函数 (F1),它以另一个函数的名称 (F2) 和其他一些输入作为输入。 F2 的输入可能会有所不同,我想要做的是使用列表作为 F1 的输入,而不是使用列表作为 F2 的输入。

F1<-function(input.list,F2){out=F2(input.list)}

但是,我想避免必须使用 a=input.list[[1]] 之类的东西来提取 input.list 中的所有变量,我不想在 F1 中为所有可能的 F2 命名所有可能的输入变量,而是我会喜欢将input.list 中的变量名直接用作F2 的输入。

【问题讨论】:

    标签: r list function input


    【解决方案1】:

    我不确定我是否完全理解您要执行的操作,但以下两个示例可以为您指明正确的方向。这里的包装函数为FUN(在您的情况下为F2)提供参数,但也接受它们自己的参数(unique_F1_factor)。 首先,如果您想使用提供给包装器F1 的参数列表,那么我建议在函数体中使用do.call,如下所示:

    # If you want to work with lists ----
    F1_list = function(input_list,unique_F1_factor,FUN) {
      out = do.call(FUN, input_list)
      # Do stuff in F1, e.g.:
      out=unique_F1_factor*out
      return(out)
    }
    

    或者,您可以完全避免使用列表:

    # Wrapper function ----
    F1 = function(...,unique_F1_factor,FUN) {
      out=FUN(...)
      # Do stuff in F1, e.g.:
      out=unique_F1_factor*out
      return(out)
    }
    

    *请注意,如果使用rnorm 等随机数生成器,即使您指定set.seeddo.call(rnorm, args)rnorm(args) 的结果也会有所不同。

    希望这会有所帮助!

    编辑

    只是为了澄清在每种情况下您将如何提供参数。对于F1_list,你会这样做:

    # Example with list:
    F1_list(
      list(sd=1,mean=3,n=10),
      unique_F1_factor = 10, 
      FUN = rnorm
    )
    

    如果您想避开该列表,请执行以下操作:

    # Example w/o list ----
    F1(
      sd=1,
      mean=3,
      n=10,
      unique_F1_factor = 10, 
      FUN = rnorm
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      相关资源
      最近更新 更多