我搜索了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
。
答案 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