相关疑难解决方法(0)

显式调用函数返回或不调用

后面有一个,而我被指责西蒙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更快或更好,因此更可取?

r

189
推荐指数
7
解决办法
9万
查看次数

如何在函数内的数据框中添加列

我有一个数据框,我想用现有的列进行一些计算,并在我的数据集中创建新列,这是现有的组合......我可以在函数外轻松地做到这一点...但是如果我将代码包装好函数,我所做的更改(内部函数)在函数外部是不可见的...即新列不存在...

我希望示例代码能够做到这一点......

r

10
推荐指数
1
解决办法
7782
查看次数

R:通过引用函数传递data.frame

我将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)

r pass-by-reference dataframe

6
推荐指数
1
解决办法
6927
查看次数

标签 统计

r ×3

dataframe ×1

pass-by-reference ×1