2.3 Konverze různých typů objektů Při psaní programů je velmi často

Transkript

2.3 Konverze různých typů objektů Při psaní programů je velmi často
Grafická prezentace a numerické modelování geochemických dat
Programování v R
2.3 Konverze různých typů objektů
Při psaní programů je velmi často třeba konvertovat jeden typ objektu na druhý. V R existuje
řada funkcí pro tento účel:
as.numeric (x)
as.character (x)
as.expression (x)
as.matrix (x)
as.data.frame (x)
data.matrix (x)
Posledně uvedené tři funkce konvertují objekt x na matici nebo data frame. O něco
přívětivější možnost převedení data framu na matici představuje funkce data.matrix , která
konvertuje všechny proměnné data framu x na numerické a pak je spojí jako sloupce jediné
matice.
is.numeric (x)
is.character (x)
is.logical (x)
is.matrix (x)
is.data.frame (x)
Testují typ daného objektu x
2.4 Vstup/výstup
print (x)
Zobrazí hodnotu vybraného objektu jazyka R.
cat (x, y,…)
Funkce cat() zobrazí jeden nebo více objektů výrazně primitivnějším způsobem než
print(), umožňuje však mnohem větší kontrolu nad způsobem zobrazování. Tato
funkce sama o sobě neodřádkovává, pro nový řádek je potřeba explicitně uvést řetězec
„\n“. Např.
2/9
>
x<-5.8
>
cat("Vysledek je ",x," N/m. \n")
Vysledek je 5.8 N/m.
Této funkce lze použít i pro zapisování dat do souboru na disk — viz dokumentace k R.
readline ()
Používá se ke vstupu dat z klávesnice.
>
x<-readline("Zadej hodnotu x:\n")
Zadej hodnotu x:
5.8
>
x
[1] "5.8"
Z tohoto příkladu je jasné, že vstup dat je vždy ve formě textového řetězce, a že hodnota
numerické proměnné musí být případně konvertována následující funkcí:
>
>
x<-as.numeric(x)
x
[1] 5.8
data.entry (x)
Vyvolá zabudovaný editor, který lze použít pro vložení/editaci dat v jednoduchém
spreadsheetu. Příkaz může být volán s parametrem x, specifikujícím objekt určený k editaci.
2.5 Podmíněné příkazy
Podmíněné provádění příkazů se provádí pomocí funkce:
if (podmínka) výraz1 else výraz2
Pokud je splněna podmínka, provádí se instrukce ve výrazu1, v opačném případě ve
výrazu2. Složitější výrazy vyžadují použití složených závorek:
if (x>2 & y<1){
print(x)
print(y)
}else{
cat(“x<=2 nebo y>=1!\n”)
}
2.6 Příkazy cyklu
I když v R— na rozdíl od jazyků BASIC nebo PASCAL — se tomu lze obvykle vyhnout, je
možné i zde používat příkazů cyklu.
for (proměnná in výraz1) výraz2
Výraz2 se provádí pro hodnoty proměnné postupně definované pomocí výrazu1.
Složitější výrazy je třeba uzavřít do složených závorek.
2/10
Kupříkladu kód:
for (f in (1:5)){
cat(“Druha mocnina”,f)
cat(“ je“,f^2,”\n”)
}
Dává výstup:
Druha
Druha
Druha
Druha
Druha
mocnina
mocnina
mocnina
mocnina
mocnina
1
2
3
4
5
je
je
je
je
je
1
4
9
16
25
while (podmínka) výraz
výraz se bude provádět dokud je splněna podmínka
repeat (podmínka) výraz
Poznámka: snažte se příkazům cyklu pokud možno vyhýbat — jejich provádění v R znatelně
zpomaluje provádění programu.
o pomocí cyklu a funkce par(mfrow=) napište krátký program,
který najednou zobrazí šest Harkerových diagramů (binárních
diagramů SiO2 vs.další oxidy hlavních prvků) podle Vaší volby. Použijte souboru s daty
pro sázavskou suitu. Nezapomeňte na správný popis os.
Cvičení 2.4
>
>
>
>
>
>
>
>
WR<-read.table("sazava.data",sep="\t")
WR<-as.matrix(WR[,-1])
windows()
par(mfrow=c(2,3))
ee<-c("Al2O3","FeO","Fe2O3","MgO","CaO","K2O")
for (f in ee){
plot(WR[,"SiO2"],WR[,f],xlab="SiO2",ylab=f,pch=WR[,"Symbol"])
}
Nyní můžeme napsat o něco sofistikovanější formu programu, která bude využívat možnosti
anotací pomocí funkce expression. Nejprve musíme ale znát, že konverze character
vektoru x na výraz (angl. expression) se provádí funkcí parse:
>
parse(text=as.expression(x))
and then the modified part of the code will be:
>
>
>
>
>
lab<-c("Al[2]*O[3]","FeO","Fe[2]*O[3]","MgO","CaO","K[2]*O")
for (f in 1:length(ee)){
plot(WR[,"SiO2"],WR[,ee[f]],xlab=expression(SiO[2]),
ylab=parse(text=as.expression(lab[f])),pch=WR[,"Symbol"])
}
# Obr. 2.8
60
65
70
50
55
60
65
70
50
14
70
65
70
4
1.0
2
6
8
K 2O
10
CaO
65
2.0
12
8
60
SiO2
6
4
MgO
55
SiO 2
2.5
SiO 2
1.5
55
2.0
Fe 2O3
1.0
0.5
3
2
14
50
1.5
5
16
4
FeO
18
A l2O 3
6
2.5
20
7
3.0
2/11
50
55
60
SiO 2
65
70
50
55
60
65
70
SiO 2
50
55
60
SiO2
Obr. 2.8. Vybrané Harkerovy diagramy pro sázavskou suitu (Cvičení 2.4)
2.7 Uživatelské funkce
jméno<- function (argument1, argument2, …) výraz
Posledním příkazem v těle definice uživatelské funkce by měl být return(x),
s argumentem upřesňujícím jméno proměnné, kterou má funkce vracet. Jinak se bere ta, jíž
byla naposledy přiřazena nějaká hodnota.
n
Příklad použití — funkce pro výpočet směrodatné odchylky (podle vzorce S =
∑ (x
i =1
− x)
2
i
n
):
odchylka<-function(x){
z<-sqrt(sum((x-mean(x))^2)/length(x))
return(z)
# funkce vrací hodnotu proměnné z
}
Důležité je si uvědomit, že proměnné použité ve funkci (v našem příkladu x a z) jsou lokální,
tedy mimo ni neznámé.
Pokud načteme do paměti soubor sazava.data, můžeme pomocí funkce odchylka()
spočítat třeba směrodatnou odchylku pro SiO2:
2/12
> WR<-read.table("sazava.data",sep="\t")
> WR<-as.matrix(WR[,-1])
> odchylka(WR[,"SiO2"])
[1] 7.462887
V anglosaských zemích se teploty stále hojně vyjadřují ve stupních
Fahrenheita.
Cvičení 2.5
o navrhněte funkci, která bude konvertovat stupně Fahrenheita na stupně Celsia
o vyzkoušejte si, jak funkce pracuje, na předcházejícím diagramu — kolik je ve
stupních Celsia –40, 98.6 a 212 °F?
o vypište konverzní tabulku Fahrenheit → Celsius pro 0, 10, …220 °F a zobrazte
data graficky
Fahrenheit
Freezing
Human body
temperature
-40°
32°
98.6°
0
-20°
80°
20°
-40°
0
Celsius
Boiling
120°
40°
212°
160°
60°
200°
80°
37°
100°
80
60
40
-20
0
> x<-seq(0,220,by=10)
> y<-Fahrenheit2Celsius(x)
> names(y)<-x
Celsius
> Fahrenheit2Celsius(c(-40,98.6,212))
[1] -40 37 100
20
Fahrenheit2Celsius<-function(x){
a<-100/(212-32)
b<-100-a*212
z<-a*x+b
return(z)
}
100
Obr. 2.9 Graficky vyjádřený vztah mezi Fahrenheitovou a Celsiovou stupnicí
0
50
100
150
200
Fahrenheit
Obr. 2.10 Konverze Fahrenheit → Celsius
> y
0
10
-17.777778 -12.222222
70
80
21.111111 26.666667
140
150
60.000000 65.555556
210
220
98.888889 104.444444
20
-6.666667
90
32.222222
160
71.111111
30
-1.111111
100
37.777778
170
76.666667
40
4.444444
110
43.333333
180
82.222222
> plot(x,y,xlab="Fahrenheit",ylab="Celsius",type="o")
> # Obr. 2.10
50
10.000000
120
48.888889
190
87.777778
60
15.555556
130
54.444444
200
93.333333
2/13
2.7.1 Argumenty funkcí
Existují dva způsoby, jak specifikovat parametry funkce jazyka R. Buď je lze uvádět v pořadí
stejném, jakém byly definovány, když byla funkce navržena. Nebo je možno používat
pojmenované parametry ve formě “jméno.argumentu = hodnota”, a ty lze pak uvádět
v náhodném pořadí.
Při psaní uživatelských funkcí lze uvádět implicitní hodnoty, jako v následujícím případě:
>
>
>
my.plot<-function(x,y,pch="+",col="red"){
…tělo funkce…
}
a potom může být taková funkce volána řadou způsobů, například:
>
>
>
my.plot(x,y)
# plots data as red crosses
my.plot(x,y,"o")
# plots data as red circles
my.plot(x,y,col="blue") # plots data as blue crosses
pak je také zřejmé, že příkaz:
>
my.plot(x,y,"blue")
nebude fungovat správně. Dobré je si uvědomit, že v R má většina argumentů funkcí
přiřazeny nějaké rozumné implicitní hodnoty. Ty obvykle stačí pro většinu aplikací a běžný
uživatel nemusí o jejich existenci vůbec vědět. Když je třeba, příkaz args vypíše všechny
argumenty dané funkce:
args (jméno_funkce)
kde jméno_funkce odkazuje na existující funkci, například:
>
args("my.plot")
function (x, y, pch = "+", col = "red")
2.7.2 Přiřazení ve funkcích
Důležité je si uvědomit, že všechny proměnné definované v rámci uživatelské funkce
(v příkladu funkce pro výpočet směrodatné odchylky to byly x a z) jsou lokální. To znamená,
že všechna přiřazení jsou jen přechodné povahy, a po opuštění funkce jsou ztracena. Proto
taky je třeba rozlišovat proměnné, byť se stejným jménem, ve funkci a v prostředí, z kterého
byla funkce volána.
Ve (vzácných) případech kdy je třeba měnit hodnotu globální proměnné, lze použít operátor
“<<–”:
>
x<<-"Hello"

Podobné dokumenty

Příručka ke cvičení z Úvodu do moderní fyziky

Příručka ke cvičení z Úvodu do moderní fyziky Úkol: Vyobrazte pr·b¥h vazebné energie na nukleon v závislosti na hmotnostním £ísle, tak jak ho ur£uje kapkový model jádra. Vykreslete téº zvlá²´ objemovou energii, povrchovou energii a coulombovu ...

Více

Cvičení z biostatistiky

Cvičení z biostatistiky Příkazy můžeme kopírovat a vkládat pomocí klasických zkratek Ctrl C, Ctrl V nebo vkládáme přes menu Edit – Paste commands only, která z vybraného textu vynechá vše kromě příkazů, tzn. zejména symbo...

Více

27.–28. 02. 2014 NáRodNí techNická kNihovNA, PRAhA

27.–28. 02. 2014 NáRodNí techNická kNihovNA, PRAhA aby ke svému prostředí dokázali přistupovat sebevědomě, tolerantně, se zájmem a respektem. V  tomto kontextu zahájila nadace Cosmicus olympiádu environmentálních projektů INESPO. Hlavní výzvou INES...

Více

Logaritmus - teorie + příklady na rovnice

Logaritmus - teorie + příklady na rovnice Logaritmus je exponent, kterým když umocníme základ logaritmu, dostaneme logaritmované číslo. (jinak: logaritmus jako funkce hledá exponent, kterým musíme umocnit základ logaritmu,

Více

ActionScript

ActionScript volání funkce. Toto umožňuje řídit paměD a znovu použít jména proměnných. Proměnné Flash 4 byly všechny permanentní - dokonce dočasné proměnné jako počítadla smyček zůstávaly v animaci dokud neskon...

Více

1.Charakterizujte křížový překladač Překlad pro jiný počítač, než na

1.Charakterizujte křížový překladač Překlad pro jiný počítač, než na 39.Popište způsob vytváření a práce s frekvenčně uspořádanou tabulkou symbolů Nejčastěji používaný symbol je nejvýš. 40.K čemu slouží mapovací funkce pole a z jakých se skládá částí Určuje umístění...

Více

6.1 Generování (pseudo)náhodných čísel 6.2 Diskrétní rozdělení

6.1 Generování (pseudo)náhodných čísel 6.2 Diskrétní rozdělení #Hodnoty náhodné veličiny X můžeme zobrazit jednoduše v tabulce val<-tabulate(X,nbins=max(X)) #a zakreslit do grafu plot(1:max(X),val) Opakované volání funkce lze řešit i jinak než for-cyklem, např...

Více

Testování robustnosti extenze UrbanPlanner pro tvorbu scénářů

Testování robustnosti extenze UrbanPlanner pro tvorbu scénářů informačních technologií, „informatizace“ a globalizace. Informační technologie mimo jiné zjednodušují, urychlují a automatizují celou řadu lidských činností včetně řízení vývoje krajiny, v současn...

Více