2016-07-05 1 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, для «period») для всех функций. Однако частота варьируется между наборами данных (ежегодно, ежеквартально и ежемесячно). Поэтому я думал о том, что пользователь предоставляет год-месяц в виде числовой переменной с двумя десятичными знаками. Январь 2010 года будет t = 2010.01. Я хочу остановить пользователя от непреднамеренного написания 2010.1 за январь 2010 года.

Также, дайте мне знать, если вы считаете, что эта стратегия связана с проблемами. Мысль о том, что числовой аргумент для «периода» мне более интуитивно понятен и меньше ошибок pronto, а затем строка, но, возможно, это не стоит.

+0

вы могли бы использовать функцию (Ndec) посчитать не в десятичной системе. –

ответ

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

Я отредактировал регулярное выражение, чтобы исправить вторую (и связанные ситуации), добавив якоря «^» и «$». Ваш первый сценарий сложнее решить. Один из методов заключается в том, чтобы заставить пользователей вводить значение в качестве символа и вызывать ошибку с помощью 'stop', если они этого не делают. – lmo

 Смежные вопросы

  • Нет связанных вопросов^_^