Generalnie wolę kodować R, aby nie otrzymywać ostrzeżeń, ale nie wiem, jak uniknąć ostrzeżenia podczas as.numeric
konwertowania wektora znaków.
Na przykład:
x <- as.numeric(c("1", "2", "X"))
Da mi ostrzeżenie, ponieważ wprowadziło NA przez przymus. Chcę, żeby NA wprowadzane przez przymus - czy istnieje sposób, aby powiedzieć „tak, to jest to, co chcę zrobić”. A może powinienem po prostu żyć z ostrzeżeniem?
A może powinienem używać innej funkcji do tego zadania?
?suppressWarnings
może?suppressWarnings
wydaje się doskonały.read.table
akceptuje argumentna.strings
?Odpowiedzi:
Zastosowanie
suppressWarnings()
:To pomija ostrzeżenia.
źródło
suppressWarnings()
zostało już wspomniane. Alternatywą jest ręczne przekonwertowanie problematycznych znaków na NA. ZróbtaRifx::destring
to właśnie dla twojego konkretnego problemu . W ten sposób, jeśli otrzymasz inne, nieoczekiwane ostrzeżenie z funkcji, nie zostanie ono zniesione.źródło
destring
działa doskonale na przykładzie op, ale jednym zastrzeżeniem dla każdego, kto zobaczy ten wątek w przyszłości, jest to, żedestring
działa inaczej niżas.numeric
wtedy, gdy ciąg docelowy jest mieszaniną ciągu i liczb: to znaczydestring("x1")
daje,1
aleas.numeric("x1")
dajeNA
Ogólnie rzecz biorąc, pomijanie ostrzeżeń nie jest najlepszym rozwiązaniem, ponieważ możesz chcieć otrzymać ostrzeżenie, gdy zostaną dostarczone nieoczekiwane dane wejściowe.
Poniższe rozwiązanie to opakowanie służące do utrzymywania tylko NA podczas konwersji typu danych. Nie wymaga żadnego opakowania.
źródło
suppressWarnings()
jest ogólnie złym pomysłem, ponieważ czasami musimy zobaczyć te ostrzeżenia.Nieznacznie zmodyfikowałem funkcję jangoreckiego w przypadku, gdy możemy mieć różne wartości, których nie można przekonwertować na liczbę. W mojej funkcji wykonywane jest wyszukiwanie szablonu i jeśli szablon nie zostanie znaleziony, zwracany jest FALSE.! przed gperl oznacza to, że potrzebujemy tych elementów wektora, które nie pasują do szablonu. Reszta jest podobna do
as.num
funkcji. Przykład:źródło