【问题标题】:How to return all elements in function-created list by their name?如何按名称返回函数创建列表中的所有元素?
【发布时间】:2022-11-27 08:08:47
【问题描述】:

我创建了以下示例函数:

my_function <- function(input_1, input_2){

a <- input_1*2
b <- input_2*3
c <- input_2*10

return(list(a = a, b = b, c = c))

}

如何在不手动操作的情况下将结果列表的所有元素保存到工作环境中?要通过蛮力做到这一点,我会这样做:

func_list <- my_function(input_1 = 5, input_2 = 6)
a <- func_list$a
b <- func_list$b
c <- func_list$c

在我正在进行的项目中,我需要将很多对象返回到环境中(全局环境或函数中),因此每次都手动这样做是不可行的。有没有办法一次退回所有物品?是否也可以返回在函数本身内创建的所有对象(而不必制作一个指定每个对象的返回列表)?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    要将它们直接保存为您的环境中的矢量,您可以使用运算符&lt;&lt;-

    my_function <- function(input_1, input_2){
      
      a <<- input_1*2
      b <<- input_2*3
      d <<- input_2*10
      
    }
    
    my_function(input_1 = 5, input_2 = 6)
    

    但要小心,因为如果使用不当可能会很危险,c 已经是 R 中的一个函数,所以不要用作变量名!

    【讨论】:

      【解决方案2】:

      由于该函数返回一个命名列表,请使用list2env

      list2env(my_function(input_1 = 5, input_2 = 6), .GlobalEnv)
      

      -检查

      > a
      [1] 10
      > b
      [1] 18
      > c
      [1] 60
      

      或者另一种选择是指定一个环境

      my_function <- function(input_1, input_2, env = parent.frame())
          {
      env$a <- input_1*2
      env$b <- input_2*3
      env$c <- input_2*10
      
      
      }
      

      -测试

      > rm(a, b, c)
      > my_function(input_1 = 5, input_2 = 6)
      > a
      [1] 10
      > b
      [1] 18
      > c
      [1] 60
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-02
        • 1970-01-01
        • 2012-02-10
        • 1970-01-01
        • 1970-01-01
        • 2011-01-30
        相关资源
        最近更新 更多