R 强制函数的数值参数具有2位小数

R 强制函数的数值参数具有2位小数,r,function,arguments,R,Function,Arguments,在R函数中,是否可能要求数字参数具有一定数量的小数位数。 我想要一些类似于: foo <- function(x) { if(x has two decimal places) { do something }else{ print("Error, please provide the number with two decimal places. Ex: 2010.01") } } foo(2010.1) Error... foo(2010.10) works

在R函数中,是否可能要求数字参数具有一定数量的小数位数。 我想要一些类似于:

foo <- function(x) {
  if(x has two decimal places) {
  do something
  }else{
  print("Error, please provide the number with two decimal places. Ex: 2010.01")
  }
}

foo(2010.1)
Error... 

foo(2010.10)
works

foo您可以使用
grepl
检查正确的模式:

grepl("^[0-9]{4}\\.[0-9]{2}$", "2010.11")
TRUE
grepl("^[0-9]{4}\\.[0-9]{2}$", "2010.1")
FALSE
grepl("^[0-9]{4}\\.[0-9]{2}$", "2010.001")
FALSE
所以你的情况看起来像:

if(grepl("^[0-9]{4}\\.[0-9]{2}$", as.character(x))) {
  do something
else stop("wrong entry")

您可以使用
grepl
检查正确的模式:

grepl("^[0-9]{4}\\.[0-9]{2}$", "2010.11")
TRUE
grepl("^[0-9]{4}\\.[0-9]{2}$", "2010.1")
FALSE
grepl("^[0-9]{4}\\.[0-9]{2}$", "2010.001")
FALSE
所以你的情况看起来像:

if(grepl("^[0-9]{4}\\.[0-9]{2}$", as.character(x))) {
  do something
else stop("wrong entry")

您可以使用函数(Ndec)来计算十进制数。您可以使用函数(Ndec)来计算十进制数。我尝试实现您的解决方案,但不起作用。foo(2010.10)返回错误消息。我认为在函数中输入条件之前,2010.10可能会被计算为2010.1。此外,2010.001没有被认为是一个错误的条目。我编辑了正则表达式,通过添加锚定“^”和“$”来修复第二个(和相关情况)。您的第一个场景更难解决。一种方法是强制用户以字符形式输入值,如果用户不这样做,则使用
stop
抛出一个错误。我尝试了实现您的解决方案,但它不起作用。foo(2010.10)返回错误消息。我认为在函数中输入条件之前,2010.10可能会被计算为2010.1。此外,2010.001没有被认为是一个错误的条目。我编辑了正则表达式,通过添加锚定“^”和“$”来修复第二个(和相关情况)。您的第一个场景更难解决。一种方法是强制用户以字符形式输入值,如果用户没有输入,则使用
stop
抛出错误。