【问题标题】:R - How to create a function with numeric vectors as argumentsR - 如何创建一个以数值向量为参数的函数
【发布时间】:2017-09-27 10:55:52
【问题描述】:
  1. 所以我想创建一个以数值向量作为参数的函数,并获取最大值和最小值并计算两者之间的差异。到目前为止,我已经到了这一点:

    v <- as.numeric() minmax <- function(v){max(v)-min(v)} minmax (v)

该函数有效,但我确信在 R 中有更方便的方法来编写它

  1. 我想添加一个名为 noNAs 的第二个参数,它定义了函数如何处理其向量缺失值 (NAs),我想拥有它,因此当 noNAs=TRUE 时,它会计算 max 和 min 之间的差异而不包括 NA价值观。我知道有一种方法可以用 na.rm 来实现,但我不知道怎么做。我是这样想的,但它似乎不起作用:

    minmax &lt;- function(v,noNAs=T){max(v)-min(v){na.rm=TRUE}}

【问题讨论】:

  • 您想要实现的目标可以通过diff(range(x)) 完成。对于第二个问题:这是几乎所有入门级 R 教程中都涵盖的基本内容,这是提出此类问题的错误网站。
  • 这应该适用于第二个问题minmax &lt;- function(v,noNAs=T){max(v,na.rm = noNAs)-min(v,na.rm = noNAs)}
  • 好吧,很抱歉我找不到我正在寻找的代码的示例或没有类似的代码。我敢肯定有办法阻止我未来的 cmets 如果它让你如此困扰! Niek:感谢您的帮助,显然我非常接近正确答案,但我无法弄清楚如何将 na.rm 推到线路上。

标签: r function vector


【解决方案1】:

通过认识到na.rm 是一个控制缺失值处理方式的参数,您几乎解决了自己的问题。现在您只需要将这些知识应用于minmax

函数的好处是你可以将你的参数传递给其他函数,就像你传递v一样。以下将定义您希望的内容:

minmax <- function(v, noNA = TRUE){
  max(v, na.rm = noNA) - min(v, na.rm = noNA)
}

不过,我建议您使用熟悉的参数名称

minmax <- function(v, na.rm = TRUE){
  max(v, na.rm = na.rm) - min(v, na.rm = na.rm)
}

如前所述,您可以通过使用来稍微简化代码

minmax <- function(v, na.rm = TRUE){
  diff(range(v, na.rm = na.rm))
}

最后,我建议您不要使用T 代替TRUET 是一个可以重新分配的变量,因此并不总是保证为 TRUE。另一方面,TRUE 是保留字,不能重新分配。因此,使用它是一个更安全的逻辑值。

【讨论】:

  • 谢谢!尝试学习编写 R 代码只是为了我自己的兴趣并帮助我做得更好并自动化一些我想弄清楚的事情是非常具有挑战性的。这些技巧总是有很大帮助。我对命令有基本的了解,但是到目前为止,将它们全部合二为一对我来说是最难的部分。我真的很感激帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多