przewodnikPoPakiecieR0

przewodnikPoPakiecieR0



112



pazuRrry

Błędy i ostrzeżenia mogą zgłaszać też nasze programy. Funkcje simpleError(basę) i simpleWarning(base) służą do przygotowania komunikacje o błędu lub ostrzeż^ ,'3 niu. Dla obu funkcji za pierwszy argument należy podać komunikat., który ma się pojawić w razie zaistnienia sytuacji awaryjnej. Błąd lub ostrzeżenie można wygcnei\|st rować funkcjami stop(base) lub warning(base). Poniżej przedstawiamy przykłady^ użycia tych funkcji.

>    tt poniższa funkcja generuje błąd lub ostrzeżenie, w zależności od

wartości argumentu

>    drażliwa <- function(x) {

+ if (class(x) !- "numeric")

+    stopCsimpleErrorCmiała być liczba!!!"))

+ if (x <0)

+    tfarning(simpleWarning("spodziewałam się czegoś nieujemnego"))

+ }

>    # argument, który nie jest liczbą wygeneruje błąd

>    drazliwaftest")

Error: miała być liczba!!!

>    # argument ujemny wygeneruje ostrzeżenie

>    drażliwa(-2)

Warning in’drazliwa("2): spodziewałam się czegoś nieujemnego

Jeżeli spodziewamy się ostrzeżeń w uruchamianym poleceniu i chcemy te ostrze- '-}■ żenią zignorować, to możemy użyć funkcji suppressWarnings(base). Argumentem tej funkcji jest polecenie do wykonania, wyznaczony zostanie jego wynik a dodatkowo og zignorowane zostaną wszystkie wygenerowane ostrzeżenia.

Podobnie jest z błędami. Jeżeli spodziewamy się, że dane polecenie może wywo^j! lać błąd i na ten błąd chcemy odpowiednio zareagować (inaczej niż przerwaniem || podprogramu), to możemy użyć funkcji try(base). Ta funkcja wykona polecenie,..^' podane za jej argument. Dodatkowo, jeżeli polecenie wykona się bez błędu, to wy- ; ; nikiem funkcji try() będzie wyznaczony wynik argumentu. Jeżeli podczas wyko- k nywania wystąpi błąd, to wynikiem funkcji tryO będzie obiekt klasy try-error -A i komunikat o błędzie. Jeżeli nie chcemy, by komunikat o błędach byl sygnalizowany; to należy za drugi argument funkcji tryO podać silent=TRUE. Poniżej przykład & bezpiecznego uruchomienia funkcji corO.

>    tt przykład bezpiecznej korelacji, czyli takiej, która nie generuje

błędów, a tylko wypisuje komentarz

>    bezpieczna.cor <- function(x) {

+ tmp <- try(cor(x), silent=TRUE)

+    # sprawdzamy czy wystąpił błąd, sprawdzając klasę wyniku funkcji try()?

*    if (class(tmp)"try-error") {

+    catCKorelaćja nie została policzonaYn")

+    tmp =0

*    >

+ tmp + >

>    # wywołanie zwykłej funkcji corO zakończy się błędem

>    cor(l)

Error in cor(l) : supply both ’x' and ’y’ or a'matrix-like 1 x’

Debugger i probier

>    ( wywołanie bezpiecznej corO błędu nir ityijnalieuje

>    bezpieczna.cor(l)

Korelacja nie została policzona

;|ti] o

i-' Przy okazji omawiania sytuacji blędogennych warto wspomnieć o pewnych, niein-tuicyjnych, zagrożeniach wynikających z arytmetyki zmiennopozycyjnej. Przyjrzyjmy się poniższemu przykładowi.

i


-?>:■# błąd wynikający z niedokładnej reprezentacji liczb rzeczywistych

y <- seq(0.7, 0.8, by-0.1)

> v

. [1) 0.7 0.8 5> V 0.8 : [13 FALSE FALSE

:9::


| / Należy być ostrożnym porównując liczby lub wektory liczb rzeczywistych. Problemy, wynikające z zaokrągleń oraz dokładności reprezentacji liczb rzeczywistych w pamięci komputera, mogą pojawić się nawet w bardzo prostych i niewinnie wyglądających sytuacjach.

VV powyższym przykładzie spodziewalibyśmy się wyniku FALSE TRUE. Zaskakujący wynik FALSE FALSE jest efektem zaokrągleń w arytmetyce liczi) rzeczywistych. Aby go uniknąć najlepiej nie używać operatora == w kontekście liczb rzeczywistych. Jeżeli chcemy mieć pewność, że super-dokladnie wyznaczymy wynik, to należy korzystać z obliczeń symbolicznych lub obliczeń na liczbach całkowitych (np. w banku . licząc pieniądze nie możemy pozwolić sobie na żadne niedokładności).

Warto przy okazji wspomnieć o dwóch zmiennych: .Machinę i .Platform, które przechowują informacje o parametrach systemu operacyjnego, w którym pracujemy oraz o parametrach maszyny obliczeniowej, na której pracujemy. Każda z tych zmiennych jest listą wartości opisujących właściwości maszyny lub platformy (a więc jak reprezentowane są liczby w pamięci maszyny oraz z jaką dokładnością wykonywane operacje). Dokładny opis poszczególnych pól tych list znaleźć można w plikach pomocy. Poniżej przedstawiono przykładowe wartości.

.tt u/artości zmiennych .Machinę i .Platform unlistf.Machinę)

double.eps

double.neg.eps

double-xmin

2.220446e-ł6

1.110223e-16

2.225074e-308

double. xmax

double.base

double.digits

1.797693e+308

2.000000e+00

5.300000e+01

double.rounding

double. guard

double.ulp.digits

.

5.000000e+00

0.000000e+00

-5.200000e+01

double.neg.ulp.digit

s dube.exponent

double.min.exp

Si'

-5.300000e+01

1.100000e+01

-1.022000e+03

p.

double.max.exp

integer.max

sizeof.long

1.024000e+03

2.147484e+09

4.000000e+00

sizeof.longlong

sizeof.longdouble

sizeof.pointer

8.000000e+00

i. 200000e+-01

4.000000e+00


Wyszukiwarka

Podobne podstrony:
5. Trasy przewodów. Poszczególne sposoby wykonywania instalacji mogą znacznie różnic się, ale są też
Scan5 podążamy ścieżką niezwykle wymagającą, bez przewodnika i drogowskazów. Błędy te mogą się nawet
Image592 sygnałów cyfrowych można stosowa i przewody skręcone (tzw. skrętki), a więc mogą być wyelim
techniki i technologie?zwykopowe 12$p Kontrola rurociągów tłokami inteligentnymi Tłoki wpuszczane d
przewodnikPoPakiecieR4 120 pazuRrry Wielomiany Legendre’a stopnia 0 — - stopnia 1 • • • stopnia 2 .
20991 str (3) 14 syntetyczna. Poza tem mogą być też stosowane: saletra wapniowa, azotan amonowy, sa
-    obliczenia, np. sprawdzające obliczenia wytrzymałościowe, które mogą być tez
6 (1024) 112 Harish Johan ..Czwórki" mogą czasem doświadczać stanu Kundalini. Nie powinno się i
przewodnikPoPakiecieR6 84 pazuRrry P Klasa może zawierać również funkcje. Szczególnie przydatne je
przewodnikPoPakiecieR4 120 pazuRrry Wielomiany Legendre’a stopnia 0 — - stopnia 1 • • • stopnia 2 .
słowia016

więcej podobnych podstron