r-存储一个对象,以便以后编写函数时使用



我正在编写一个函数,它可以帮助我对数据帧进行子集设置,然后将数据帧提供给另一个操作。此函数的输出将是第二个操作的结果。然而,由于我仍然需要清理后的数据帧用于其他目的,我想知道我是否可以将这样的数据帧存储在环境中,以便以后可以调用它?

例如,假设我有这个数据帧。

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存储在attribute中。

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))

最新更新