2016-07-05 54 views
0

在R函数中,是否可以要求提供具有特定小数位数的数字参数。 我想有这样的:强制数字参数功能有2个小数位

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 

语境:我与不同的数据集一组输入功能写package。所有函数都有一个通用的数字参数(t,用于“句点”)。但是,数据集之间的频率会有所不同(每年,每季度和每月)。所以我正在考虑让用户将年份提供为带有两位小数的数字变量。 2010年1月将是​​t = 2010.01。我想阻止用户无意中在2010年1月写入2010.1。

另外,让我知道如果你认为这个策略是否有麻烦。想法wat,“期间”的数字参数,我会更直观,少错误pronto然后一个字符串,但也许是不值得的。

+0

你可以使用功能(加密卡)来计算无小数。 –

回答

2

你可以使用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") 
+0

我试着实施你的解决方案,但它不起作用。 foo(2010.10)返回错误消息。我认为2010.10可能会在进入条件函数之前被评估到2010.1。此外,2010.001不被视为错误的条目 – LucasMation

+0

我编辑了正则表达式,通过添加锚点“^”和“$”来修复第二个(和相关情况)。你的第一种情况更难以解决。一种方法是强制用户输入值作为字符,如果不是,则用“停止”引发错误。 – lmo