【问题标题】:R, argument missing with no defaultR,没有默认值的参数丢失
【发布时间】:2020-04-22 11:18:35
【问题描述】:

我构建了一个函数,当其中一个参数在代码中被硬编码时它可以工作,但是一旦我将它包含在参数列表中,我就会得到一个错误......我意识到这很简单,但却难倒我!

## load necessary libraries
library(gsubfn)

## number of days
days <- 5

AdDayFun <- function (inarray) {
    gsubfn("^\\D*\\d+\\D*\\K(\\d+)",
           ~ ifelse(as.numeric(x) < 5,
                    sprintf("%02d",as.numeric(x)+1),
                    "00"),
           inarray,
           perl=TRUE
           )
}

## initial population 
pop <- matrix(c("a-00-04","a-00-00","a-00-00", "dead", "a-00-00"), nrow =1)
pop




pop <- rbind(pop, AdDayFun(pop[nrow(pop), ]))
pop

这一切都很好,直到我将函数更改为需要两个参数,然后出现错误?

AdDayFun <- function (inarray, nummax) {
    gsubfn("^\\D*\\d+\\D*\\K(\\d+)",
           ~ ifelse(as.numeric(x) < nummax,
                    sprintf("%02d",as.numeric(x)+1),
                    "00"),
           inarray,
           perl=TRUE
           )
}

(AdDayFun(pop[nrow(pop), ], 7))

这样的错误: ifelse(as.numeric(x)

【问题讨论】:

  • 你函数中的x是从哪里来的?
  • 我认为 gsubfn 来自我称为“inarray”的数组变量。德克萨斯州。 J

标签: r function arguments


【解决方案1】:

这里很容易混淆。您正在编写一个函数AdDayFun,它包装了另一个函数gsubfn,它本身将一个未命名的函数或公式作为参数。

我们希望能够将nummax 作为参数传递给未命名的函数。但是,似乎没有用于将任意参数传递给此函数的内置方法。

但是,由于您将 gsubfn 包装在自己的函数中,因此有一种解决方法,即为未命名函数预定义第二个参数,其中 nummax 作为默认值:

AdDayFun <- function (inarray, nummax) 
{
  f <- function(x, y = nummax)
  {
    ifelse(as.numeric(x) < y, sprintf("%02d", as.numeric(x) + 1), "00")
  }

  gsubfn("^\\D*\\d+\\D*\\K(\\d+)", f, inarray, perl = TRUE)
}

结果如下:

a <- AdDayFun(pop[nrow(pop),], 5)
a
#> [1] "a-00-05" "a-00-01" "a-00-01" "dead"    "a-00-01"

a <- AdDayFun(a, 7)
a
#> [1] "a-00-06" "a-00-02" "a-00-02" "dead"    "a-00-02"

a <- AdDayFun(a, 5)
a
#> [1] "a-00-00" "a-00-03" "a-00-03" "dead"    "a-00-03"

【讨论】:

  • 谢谢艾伦,关闭,但对我来说,AdDayFun 产生的结果在 00 和 01 之间迭代,无论为 nummax 设置什么值。它是正则表达式选择中的东西吗?
  • @JimMaas 抱歉 - 我想我误解了文件中 backref 的含义。我已经大大改变了我的答案,无论如何现在使用它应该更简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 2015-09-27
  • 2021-09-17
  • 2021-07-30
  • 1970-01-01
  • 2020-01-14
相关资源
最近更新 更多