Pravdepodobne veľmi základná otázka, ale jej znepokojujúce je, že nemôžem "ľahko nájsť riešenie ... takže som si myslel, že by som mal prísť k múdrosti tých múdrych ..."
Chcel by som byť schopný vrátiť TRUE alebo FALSE podľa toho, či je reťazec znakov čisto číslo a nie iba čísla ... Najbližšie, čo som dostal, bolo
grepl("[0-9]","99393")
grepl("[0-9]","blah")
Toto však nefunguje, pretože nasledujúci text sa vráti ako PRAVDA, keď by mal byť FALSE
grepl("[0-9]","993T3")
Ako vždy, každá pomoc by bola ocenená!
UPRAVIŤ
Ako poznamenal joran, je dôležité si uvedomiť, že reťazec znakov bude vždy obsahovať iba celé čísla a písmená, t. J. Nebude obsahovať desatinné miesta alebo čiarky pre číslo ...
odpovede:
5 pre odpoveď č. 1Prečo jednoducho nepoužívate robustné interné metódy na donútenie k celému číslu alebo číslu?
Vráti sa NA
ak to nie je možné is.na
ak chcete logický výsledok:
is.na( as.integer( "993T3" ) )
# [1] TRUE
is.na( as.integer( "99393" ) )
# [1] FALSE
Nezabudnite, že ak máte čo do činenia s číslami s pohyblivou rádovou čiarkou, použite as.numeric
v opačnom prípade skrátite časť svojho čísla s pohyblivou rádovou čiarkou pomocou as.integer
4 pre odpoveď č. 2
Mali by ste zadať celý regulárny výraz a určiť začiatok (^) a koniec reťazca ($). Napríklad:
> grepl("^[[:digit:]]+$","993T3")
[1] FALSE
Pozri na http://en.wikibooks.org/wiki/R_Programming/Text_Processing#Regular_Expressions ak sa chcete dozvedieť viac o regexp.
0 pre odpoveď č. 3
Čo takto !grepl("[^0-9]","993T3")
?
Edit: Toto sa vráti TRUE
pre prázdny reťazec. Aby ste tomu zabránili, použite
!grepl("[^0-9]", x) & nzchar(x)
pre vektor x
typu znaku.