后面有一个,而我被指责西蒙Urbanek从R核心团队(我相信)用于推荐用户显式调用return的函数(他的评论被删除,虽然)的结尾:
foo = function() {
return(value)
}
Run Code Online (Sandbox Code Playgroud)
相反,他建议:
foo = function() {
value
}
Run Code Online (Sandbox Code Playgroud)
可能在这种情况下需要:
foo = function() {
if(a) {
return(a)
} else {
return(b)
}
}
Run Code Online (Sandbox Code Playgroud)
他的评论揭示了为什么不打电话,return除非严格要求是好事,但这被删除了.
我的问题是:为什么不打电话return更快或更好,因此更可取?
我有一个数据框,我想用现有的列进行一些计算,并在我的数据集中创建新列,这是现有的组合......我可以在函数外轻松地做到这一点...但是如果我将代码包装好函数,我所做的更改(内部函数)在函数外部是不可见的...即新列不存在...
我希望示例代码能够做到这一点......
我将data.frameas参数传递给想要更改内部数据的函数:
x <- data.frame(value=c(1,2,3,4))
f <- function(d){
for(i in 1:nrow(d)) {
if(d$value[i] %% 2 == 0){
d$value[i] <-0
}
}
print(d)
}
Run Code Online (Sandbox Code Playgroud)
当我执行时,f(x)我可以看到data.frame内部如何被修改:
> f(x)
value
1 1
2 0
3 3
4 0
Run Code Online (Sandbox Code Playgroud)
但是,data.frame我通过的原件未经修改:
> x
value
1 1
2 2
3 3
4 4
Run Code Online (Sandbox Code Playgroud)
通常我通过返回修改后的一个克服了这个:
f <- function(d){
for(i in 1:nrow(d)) {
if(d$value[i] %% 2 == 0){
d$value[i] <-0
}
}
d
}
Run Code Online (Sandbox Code Playgroud)
然后调用重新分配内容的方法:
> x <- f(x)
> x …Run Code Online (Sandbox Code Playgroud)