R语言 更改函数外部作用域中的数据框

zaq34kh6  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(145)

fun_outer中,我创建了一个空 Dataframe df,我想通过内部函数fun_innerdf添加一个新行:

fun_outer <- function() {
  df <- data.frame()
  fun_inner()
  return(df)
}

fun_inner <- function(){
  tmp <- data.frame(x = 1 ,y = 2)
  df <<- rbind(df, tmp)
}

我希望执行fun_outer()可以返回如下df

x   y
  1   2

但我实际上得到了一个错误:

Error in rep_len(xi, nvar) (temp.R#355): attempt to replicate non-vector

然后我尝试了另一种方法:

fun_outer <- function() {
  df <- data.frame()
  fun_inner(df)
  return(df)
}

fun_inner <- function(x){
  tmp <- data.frame(x = 1 ,y = 2)
  df <<- rbind(x, tmp)
}

这一次,执行fun_outer()时,我得到了另一个错误:

Error in fun_inner(df) (temp.R#344): cannot change value of locked binding for 'df'

如何在外部函数中创建数据框,并使用内部函数将行绑定到它?
我的意图是在函数A中使用一个迭代器函数,将每次迭代的新数据附加到在函数A中创建的 Dataframe 中

cvxl0en2

cvxl0en21#

如果在当前函数中找不到变量,则在定义函数的环境中查找,而不是在调用函数的环境中查找。<<-的工作原理相同。您需要的是作为调用方的父框架。

fun_outer <- function() {
  df <- data.frame()
  fun_inner()
  return(df)
}

fun_inner <- function(envir = parent.frame()){
  tmp <- data.frame(x = 1 ,y = 2)
  envir$df <- rbind(envir$df, tmp)
}

fun_outer()
##   x y
## 1 1 2

相关问题