存储一个对象供以后编写函数时使用

Store an object for later use when writing a function

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

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

      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 添加到 return。否则,当我尝试将输出提供给另一个函数时,该函数的输出将包含 workingdf,这是我不想要的。

例如,在这种情况下,如果我想这样做,我需要函数的输出仅为整数。

my_fun(data, Var1) - 5

我希望我说清楚了。

非常感谢任何帮助!!

您可以 return 函数列表中包含您想要的结果。

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