R函数产生不正确的结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R函数产生不正确的结果相关的知识,希望对你有一定的参考价值。

我正在尝试使用R中的函数来做得更好,并且我正在研究一个函数,以将100到500的每个奇数取值,该值可以被3整除。我与下面的函数很接近。它会继续正确返回所有值,但在不应该包含序列号(101)的情况下,它还会包含第一个数字。任何帮助将不胜感激。我写的代码如下:

Test=function(n){
  if(n>100){
   s=seq(from=101,to=n,by=2)
   p=c()
   for(i in seq(from=101,to=n,by=2)){
    if(any(s==i)){
      p=c(p,i)
      s=c(s[(s%%3)==0],i)
     }}
   return (p)}else{
    stop
    }}
  Test(500)
答案

[这里是一个函数,它获得3的所有非偶数倍。它是完全矢量化的,根本没有循环。

  1. 检查n是否在[100, 500]范围内。
  2. 创建从N100的整数矢量n
  3. 创建N的元素的逻辑索引,这些元素可以被3整除,但不能被2整形。
  4. 提取与索引N匹配的i的元素。

主要工作在3个代码行中完成。

Test <- function(n){
  stopifnot(n >= 100)
  stopifnot(n <= 500)
  N <- seq_len(n)[-(1:99)]
  i <- ((N %% 3) == 0) & ((N %% 2) != 0)
  N[i]
}

Test(500)
另一答案

这里是您目标的功能示例

Test <- function(n) {
  if(n<100 | n> 500) stop("out of range")
  v <- seq(101,500,by = 2)
  na.omit(ifelse(v%%2==1 & v%%3==0,v,NA))
}
  • stop()超出范围n时将调用[>]
  • [[100,500]输出期望的奇数值+ ifelse()
  • [NA过滤出na.omit并产生最终结果
另一答案

这里是单线,可以选择将下限从默认值100更改为所需的任何值。如果边界错误,它将返回一个空向量,而不是引发错误。

以上是关于R函数产生不正确的结果的主要内容,如果未能解决你的问题,请参考以下文章

R 用 lubridate 在 DST 上添加月份会产生意想不到的结果

opencv calibrateCamera 函数产生不好的结果

R中的绘图函数产生图例而不调用legend()

处理产生奇怪结果的字节数组的字符串构造函数[重复]

Linq 查询产生不正确的结果

标量的OpenCV双矩阵除法产生不正确的结果