2015-12-15 4 views
-2

Мне нужно создать функцию, которая будет определять, есть ли какое-либо числовое значение, присутствующее в вводе. Для этого я написал этот кодопределить числовые значения в строке

test<-function(x){ 
    if(is.numeric(x)){ 
    return(T) 
    }else{ 
    return(F) 
    } 
} 

Однако, когда я проверить его с сказать

> test(a123) 
Error in test(a123) : object 'a123' not found 

Но это работает, когда я использую кавычки

> test("a123") 
[1] FALSE 

Однако я хочу его работать в первой форма. Любая помощь по этому поводу будет полезна

+0

Использование '' 'существует()' '' в связке с вашей функции: http://stackoverflow.com/questions/9368900/how-to-check-if-object- variable-is-defined-in-r –

+3

Это две разные вещи: строка «a123» и объект с именем ** a123 **. BTW: Зачем вы пишете эту функцию, если она делает то же самое, что и 'as.numeric()'? – jogo

+0

Его просто для проверки, если при вводе значений в код один ошибочно включил символ или алфавит –

ответ

0

test(a123) не будет работать. Сначала вы должны сначала сохранить вход пользователя в объект, а затем передать его функции.

Обратите внимание, что при вашей функции test(123)также возвращаетсяFALSE! (Даже если вы вставите deparse(substitute(x)) как предложено в комментариях)

А короткий и правильный способ выполнить тест является grep("[^0-9]", x), который возвращает 1, если строка x содержит ничего, что не цифра, 0, если нет.

Если вы действительно хотите, чтобы ваша функция работала в том, что вы называете первой формой (но я думаю, что это не очень хорошая идея, поскольку она не может получить какой-либо объект и, по-видимому, не имеет никакого смысла в R скрипте):

test<-function(x){ 
    x<-deparse(substitute(x)) 
    grep("[^0-9]",x) 
} 

> test(123) 
integer(0) 
> test(a123) 
[1] 1 
+0

Тест 'grep' должен содержать' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ', ' –

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