【问题标题】:Reuse an object created in a function in R重用在 R 中的函数中创建的对象
【发布时间】:2014-07-15 18:48:12
【问题描述】:

我搜索了 SO 并找到了 similar question,但我仍然无法使用它。

我对 R 编程比较陌生,所以我很感激这个帮助。

假设我有一个data.frame:

df <- data.frame(State = c("NJ", "MA", "CA", "CA", "MA"), 
                 Sales = c(15, 100, 30, 56, 60), 
                 Price = c(34, 52, 21, NA, 20), 
                 stringsAsFactors = FALSE)

现在我想要一个函数来创建一个新的data.frame,它只有一个给定的状态......所以我写道:

state_function <- function(state) {
        #Subset the rows in the state from all rows
        new_df <- df[df[,"State"] == state, ]
         ## I will do many other things inside the function ##
        summary(new_df)
        return(new_df)
}

state_function ("NJ")

但是现在我想在这个函数之外重新使用这个 data.frame, new_df ..(我想概括这个例子).. 我该怎么做?一般来说,我想使用我在函数中创建的对象或data.frame,而不是函数。

【问题讨论】:

  • 只分配? new_df &lt;- state_function ("NJ")

标签: r function


【解决方案1】:

在运行函数时将值赋给变量:

new_df <- state_function("NJ")

【讨论】:

    【解决方案2】:

    我想你想要这个:

    state_function <- function(state) {
    
       new_df <- subset(df, State == state)
       print( summary(new_df) )
       new_df
    
    }
    
    new_df <- state_function("CA")
    

    请注意,我们可以使用subset 函数来清理正文的第一行。如果没有print,问题中的summary 行也无济于事。函数内不会发生自动打印。 return 也不是真正需要的。最后将函数的输出赋值给一个变量。

    【讨论】:

      【解决方案3】:

      您还可以使用assign 在函数中分配全局变量。不过要小心,因为每次运行该函数时y 都会被覆盖。

      state.function <- function(x, state)
      {
          assign('y', subset(x, x$State == state), envir = .GlobalEnv)
          return(y)
      }
      
      > state.function(df, "CA")
      #   State Sales Price
      # 3    CA    30    21
      # 4    CA    56    NA
      > y
      #   State Sales Price
      # 3    CA    30    21
      # 4    CA    56    NA
      

      如果您要快速浏览数据,这很有效。如果删除return(y),函数将没有输出,但变量y 将存在于全局环境中。这有时很有用。

      如果你讨厌引用的话,就像我一样

      state.function <- function(x, state)
      {
          z <- deparse(substitute(state))
          assign('y', subset(x, x$State == z), envir = .GlobalEnv)
      }
      
      > state.function(df, CA)
      > y
      #   State Sales Price
      # 3    CA    30    21
      # 4    CA    56    NA
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多