D. *_*der 1 r function global-variables
我有两个data.frames df1和errors和功能add_to_errors()。该函数的参数是行数(of df1)的向量,该函数应将选择的行添加到名为的新data.frame中errors。
df1 <- data.frame(id=1:10,
var1=rep(NA, 2),
var2=rep(NA, 2))
errors <- data.frame()
add_to_errors <- function(ids){
rows_to_add <- df1[ids,]
errors <- rbind(errors, rows_to_add)
return(errors)
}
add_to_errors(c(1,2))
add_to_errors(c(6,7))
Run Code Online (Sandbox Code Playgroud)
当我执行add_to_errors(1, 2)和时add_to_errors(6,7),errors每次调用该函数似乎都被覆盖了。如何errors在函数中作为全局变量访问?
输出应如下所示:
id var1 var2
1 1 NA NA
2 2 NA NA
3 6 NA NA
4 7 NA NA
Run Code Online (Sandbox Code Playgroud)
我建议不要使用父作用域运算符<<-,而应使用具有适当设计和封装的函数:
add_to_errors <- function(df1, ids, errors) {
rows_to_add <- df1[ids,]
errors <- rbind(errors, rows_to_add)
return(errors)
}
df1 <- data.frame(id=1:10, var1=rep(NA, 2), var2=rep(NA, 2))
errors <- data.frame()
errors <- add_to_errors(df1, c(1,2), errors)
errors <- add_to_errors(df1, c(6,7), errors)
errors
id var1 var2
1 1 NA NA
2 2 NA NA
6 6 NA NA
7 7 NA NA
Run Code Online (Sandbox Code Playgroud)
上面的函数已经过重构,可以接受所有需要的参数作为输入,而输出是使用逻辑生成的数据帧。调用它时,我们用返回值破坏(覆盖)输入数据帧。