通过R中的嵌套函数更新数据帧

时间:2017-02-21 16:05:17

标签: r

我对我的程序有一个小的可重现版本的问题。

我的代码结构涉及嵌套函数,类似于下面显示的函数,只是更复杂。

{{1}}

结果显示,为了更新数据框,没有从bar()函数返回值。

为了将更新的表格返回到foo()函数,我需要更改什么?

提前致谢。

2 个答案:

答案 0 :(得分:1)

最好将data.frame作为参数传递,而不是将其硬编码到函数中。以下是一些应该完成您正在寻找的修改

foo <- function(df) {
  for(i in seq_len(nrow(df))) {
    df[i, ] <- bar(df[i, ])
  }
  print(df)
}

bar <- function(df) {
  if(df[, "val2"] == 0) {
    df[, "val2"] <- 1
    print(df[, ])
  }
  return(df)
}

> foo(x)
  val1 val2
1    1    1
  val1 val2
2    2    1
  val1 val2
3    3    1
  val1 val2
4    4    1
  val1 val2
5    5    1
  val1 val2
1    1    1
2    2    1
3    3    1
4    4    1
5    5    1

答案 1 :(得分:0)

所以我有点困惑为什么你需要编写一个函数来实现这一目标。到目前为止,最简单的解决方案只是有条件地对数据帧进行子集化并分配值:

  x <- data.frame(c(1:5),c(0))
  colnames(x) <- c("val1", "val2")


  x$val2[x$val2==0]<-1

但是,如果这个答案过于简单,就像解决方案需要扩展一样,我怀疑嵌入其中一个应用函数可能会有效。