我正在编写一个函数,它可以帮助我对数据帧进行子集设置,然后将数据帧提供给另一个操作。此函数的输出将是第二个操作的结果。然而,由于我仍然需要清理后的数据帧用于其他目的,我想知道我是否可以将这样的数据帧存储在环境中,以便以后可以调用它?
例如,假设我有这个数据帧。
ID Var1
1 5 3
2 6 1
我的函数是这样的:
mu_fuc <- function(df, condition) {
#clean dataset
condition <- eval(as.list(match.call())$condition, df)
workingdf <- subset(df, condition < 3). ####I am trying to store this working dataframe for later use.
#second action
result = sum(workingdf[condition])
#output of the function
return(result)
}
由于函数的结果稍后也会被使用,所以我不能添加workingdf来返回。否则,当我试图将输出提供给另一个函数时,该函数的输出将包含workingdf,这是我不想要的。
例如,在这种情况下,如果我想这样做,我需要函数的输出仅为整数。
my_fun(data, Var1) - 5
我希望我能把自己说清楚。
非常感谢您的帮助!!
您可以从函数返回一个列表,其中包含您想要的结果。
mu_fuc <- function(df, condition) {
#clean dataset
condition <- eval(as.list(match.call())$condition, df)
workingdf <- subset(df, condition < 3)
#second action
result = sum(workingdf)
#output of the function
return(list(result = result, workingdf = workingdf))
}
称之为:
output <- mu_fuc(df, Var1)
您可以使用$
运算符将结果分离出来,并分别进行处理。
output$result
output$workingdf
您可以将workingdf
存储在attr
ibute中。
mu_fuc <- function(df, condition) {
## clean dataset
condition <- eval(as.list(match.call())$condition, df)
workingdf <- subset(df, condition < 3)
## second action
result <- sum(condition)
attr(result, "workingdf") <- workingdf
return(result)
}
计算结果与往常一样。
r <- mu_fuc(d, Var1)
r - 5
# [1] -1
# attr(,"workingdf")
# ID Var1
# 2 6 1
为了避免由于外观原因而显示属性,请使用as.numeric
as.numeric(r) - 5
# [1] -1
或
r2 <- as.numeric(mu_fuc(d, Var1))
r2 - 5
# [1] -1
要获取workingdf
,请从属性中获取它。
wdf <- attr(mu_fuc(d, Var1), "workingdf")
wdf
# ID Var1
# 2 6 1
数据:
d <- data.frame(ID=5:6, Var1=c(3, 1))