我对我的程序有一个小的可重现版本的问题。
我的代码结构涉及嵌套函数,类似于下面显示的函数,只是更复杂。
{{1}}
结果显示,为了更新数据框,没有从bar()函数返回值。
为了将更新的表格返回到foo()函数,我需要更改什么?
提前致谢。
答案 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
但是,如果这个答案过于简单,就像解决方案需要扩展一样,我怀疑嵌入其中一个应用函数可能会有效。