重用在R中的函数中创建的对象

时间:2014-05-27 00:51:01

标签: r function

我搜索了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.framenew_df ..(我想概括这个例子)..我怎么能这样做?一般来说,我想使用我在函数外部创建的对象或data.frame

3 个答案:

答案 0 :(得分:2)

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

new_df <- state_function("NJ")

答案 1 :(得分:1)

我想你想要这个:

state_function <- function(state) {

   new_df <- subset(df, State == state)
   print( summary(new_df) )
   new_df

}

new_df <- state_function("CA")

请注意,我们可以使用subset函数清理正文的第一行。如果没有summary,问题中的print行也无效。功能内不会发生自动打印。另外,return并不是真的需要。最后将函数的输出分配给变量。

答案 2 :(得分:0)

您还可以使用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