knitr::opts_chunk$set(echo = FALSE, results = 'asis') devtools::load_all()
r6obj_docstat <- rmddochelper::R6ClassDocuStatus$new() r6obj_docstat$set_current_status(psVersion = "0.0.901", psStatus = "Initialisation", psProject = "ZL_HS_2016") r6obj_docstat$include_doc_stat(psTitle = "## Document Status")
r6ob_abbrtable <- rmddochelper::R6ClassTableAbbrev$new() ### # include table of abbreviations only, if there are any if (!r6ob_abbrtable$is_empty_abbr()) r6ob_abbrtable$include_abbr_table(psAbbrTitle = "## Abbreviations")
if
-BedingungenIn der letzten Übung hatten wir gesehen, wie der Programmablauf mit if
-Bedingungen gesteuert wird. Im einfachsten Fall wird eine Bedingung überprüft und falls diese zutrifft, werden gewissen Anweisungen ausgeführt. Dieses Konzept kann auch erweitert werden. Wir können verschiedene Bedingungen gleichzeitig überprüfen und bei deren Zutreffen jeweilen verschiedene Anweisungen ausführen.
Als Beispiel können wir bei den natürlichen Zahlen zwischen r nLowerLimit
und r nUpperLimit
überprüfen, ob diese durch 2, 3 oder 5 teilbar sind.
nLowerLimit <- 1 nUpperLimit <- 10 for (nIdx in nLowerLimit:nUpperLimit){ if (identical(nIdx %% 2, 0)) { cat(nIdx, " ist durch 2 teilbar\n") } else if(identical(nIdx %% 3, 0)) { cat(nIdx, " ist durch 3 teilbar\n") } else if(identical(nIdx %% 5, 0)) { cat(nIdx, " ist durch 5 teilbar\n") } else { cat(nIdx, " ist weder durch 2 noch durch 3 noch durch 5 teilbar\n") } }
Aufgrund des Resultats sehen wir klar, dass jede Bedingung nur einmal getestet wird. Dies erkennen wir aufgrund der Tatsache, dass für die Zahlen $6$ und $10$ nur die Teilbarkeit durch $2$ aufgelistet wird. Falls keine der zu testenden Bedingungen in den runden Klammern nach den if
-Anweisungen zutreffen wird der Teil nach der else
-Anweisung ausgeführt.
Finden Sie mit einer Kombination aus einem Loop und von verschiedenen if
-Bedingungen die Zahlen, welche durch $2$, $3$ und $7$ teilbar sind und alle Primzahlen zwischen $11$ und $50$. Für das Finden der Primzahlen reicht es, wenn Sie die Teilbarkeit bis zur Zahl $7$ überprüfen. Ist eine Zahl nur durch $1$ und sich selber teilbar, dann ist es eine Primzahl.
Gegeben ist das folgende Pedigree. Berechnen Sie die Inzuchtkoeffizienten aller Tiere im Pedigree und die Elemente der Matrix $R$, wobei $R$ aufgrund der Cholesky-Zerlegung der additiv genetischen Verwandtschaftsmatrix $A$ definiert ist. Es gilt also
\begin{equation} A = R * R^T \label{eq:AChol} \end{equation}
wobei $R$ eine linke untere Dreiecksmatrix ist.
nNrAniInPedEx2 <- 8 suppressPackageStartupMessages(require(pedigreemm)) pedEx2 <- pedigree(sire = c(NA, NA, 1, 1, 4, 5, 5, 6), dam = c(NA, NA, 2, 3, 3, 2, 3, 7), label = as.character(1:nNrAniInPedEx2)) print(pedEx2)
Hinweise: Sie können Ihre Resultate überprüfen mit folgenden R-Funktionen.
chol(matA)
wobei matA
die genetisch additive Verwandtschaftsmatrix ist. Also können Sie die Matrix $R$ mit folgenden Anweisungen in R berechnen.library(pedigreemm) nNrAniInPedEx2 <- 8 pedEx2 <- pedigree(sire = c(NA, NA, 1, 1, 4, 5, 5, 6), dam = c(NA, NA, 2, 3, 3, 2, 3, 7), label = as.character(1:nNrAniInPedEx2)) matA <- as.matrix(getA(ped = pedEx2)) matR <- t(chol(matA))
inbreeding()
berechnet werden.r6ob_abbrtable$writeToTsvFile()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.