Des articles

1.1 : R et données - Mathématiques


Comment saisir les données depuis R

Nous devons maintenant savoir comment entrer des données dans R. La commande de base est c() (raccourci du mot enchaîner):

Code (PageIndex{1}) (Python) :

c(1, 2, 3, 4, 5)

Cependant, de cette façon, vos numéros seront oubliés car R ne se souvient de rien qui n'est pas enregistré dans objet:

Code (PageIndex{2}) (Python) :

aa <- c(2, 3, 4, 5, 6, 7, 8)aa

(Ici, nous créé un objet aa, attribué à ce vecteur de nombres de un à cinq, puis imprimé objet en tapant son nom.)

Si vous souhaitez créer et imprimer un objet simultanément, utilisez des parenthèses externes :

Code (PageIndex{3}) (Python) :

(aa <- c(1, 2, 3, 4, 5, 6, 7, 8, 9))aa

(Au fait, ici nous avons créé un objet de nouveau, et R silencieusement l'a réécrit. R ne donne jamais d'avertissement si l'objet existe déjà !)

En plus de c(), nous pouvons utiliser les commandes rep(), seq(), ainsi que les deux points (:) opérateur:

Code (PageIndex{4}) (Python) :

rep(1, 5) rep(1:5, chacun=3)seq(1, 5)1:5

Comment nommer vos objets

R n'a pas de règles strictes sur le nommage de vos objets, mais il est préférable de suivre quelques directives :

  1. Gardez à l'esprit que R est sensible aux majuscules et minuscules, et, par exemple, X et x sont des noms différents.
  2. Pour les objets, utilisez uniquement des lettres, des chiffres, des points et (éventuellement) des traits de soulignement anglais. Ne mettez pas de chiffres et de points au début du nom. L'une des approches recommandées est la double lettre (ou la triple lettre) lorsque vous nommez des objets comme aa, jjj, xx, etc.
  3. Dans les blocs de données, nous vous recommandons de nommer vos colonnes (caractères) avec lettres majuscules et points. Les exemples sont tout au long de ce livre.
  4. Ne réaffectez pas les noms déjà donnés aux fonctions populaires (comme c()), aux mots réservés (en particulier T, F, NA, NaN, Inf et NULL) et aux objets prédéfinis comme pi(^{[1]}), LETTRES et des lettres. Si vous l'avez fait accidentellement, il existe une fonction conflict() pour vous aider dans ces situations. Pour voir tous les mots réservés, tapez ?Réservé.

Comment charger les données de texte

En substance, les données qui doivent être traitées peuvent être de deux types : texte et binaire. Pour éviter des détails inutiles, nous accepterons ici que données de texte est quelque chose que vous pouvez lire et éditer dans le éditeur de texte simple comme Geany(^{[2]}). Mais si vous voulez modifier le données binaires, vous avez généralement besoin d'un programme qui a généré ce fichier dans le passé. Sans le logiciel spécifique, les données binaires ne sont pas faciles à lire.

Les données de texte pour le traitement statistique sont généralement des tableaux de texte où chaque ligne correspond à la ligne du tableau et les colonnes sont séparées par délimiteurs, soit invisible, comme les espaces ou les symboles de tabulation, soit visible, comme les virgules ou les points-virgules. Si vous voulez que R "ingère" ce genre de données, il faut d'abord s'assurer que le fichier de données se trouve dans le même répertoire que R considère comme un directeur de travail:

Code (PageIndex{5}) (Python) :

getwd()

Si ce n'est pas le répertoire que vous voulez, vous pouvez le changer avec la commande :

Code (PageIndex{6}) (Python) :

setwd("e:wrk	emp")getwd()

Notez comment R fonctionne avec les barres obliques inverses sous Windows. Au lieu d'une barre oblique inverse, vous devez entrer deux. Seulement dans ce cas, R sous Windows le comprendra. Il est également possible d'utiliser des slashs sous Windows, comme sous Linux et macOS :

Code (PageIndex{7}) (Python) :

setwd("e:/wrk/temp")getwd()

S'il vous plaît toujours démarrer chacune de vos sessions R de changement de répertoire de travail. En fait, il n'est pas absolument nécessaire de se souvenir des longs chemins. Vous pouvez le copier depuis votre gestionnaire de fichiers dans R. Ensuite, le R graphique sous Windows et macOS a un système de menu rudimentaire, et il est parfois plus facile de changer de répertoire de travail via le menu. Enfin, la collection asmisc.r contient la fonction Files() qui est le texte Navigateur de fichiers, il est donc possible d'exécuter setwd(Files()) puis de suivre les instructions à l'écran(^{[3]}).

L'étape suivante après vous être assuré que le répertoire de travail est correct, consiste à vérifier si votre fichier de données est en place, avec la commande dir() :

Code (PageIndex{8}) (Python) :

dir("données")

Il est vraiment pratique de séparer les données de toutes les autres choses. Par conséquent, nous avons supposé ci-dessus que vous avez des données de sous-répertoire dans votre répertoire de travail et que vos fichiers de données (y compris mydata.txt) se trouvent dans ce sous-répertoire. Veuillez le créer (et bien sûr, créer le répertoire de travail) si vous ne l'avez pas encore. Vous pouvez les créer avec votre gestionnaire de fichiers, ou même avec R lui-même :

Code (PageIndex{9}) (Python) :

dir.create("données")

Vous pouvez maintenant charger vos données avec la commande read.table(). Mais attendez une minute ! Tu dois comprendre la structure de votre fichier en premier.

La commande read.table() est sophistiquée mais elle n'est pas assez intelligente pour déterminer la structure des données à la volée(^{[4]}). C'est pourquoi vous devez vérifier les données. Vous pouvez l'ouvrir dans n'importe quel éditeur de texte simple disponible, dans votre navigateur Web ou même depuis R avec la commande file.show() ou url.show(). Il sort les données « telles quelles ». Voici ce que vous verrez :

Code (PageIndex{10}) (Python) :

file.show("données/mesdonnées.txt")

(Au fait, si vous tapez file.show("data/my et appuyez sur Tab, achèvement vous montrera si votre fichier est ici, s'il est vraiment ici. Cela économisera à la fois la saisie du nom du fichier et la vérification de la présence avec dir().)

Comment le fichier mydata.txt est-il apparu dans votre sous-répertoire de données ? Nous supposons que vous l'avez déjà téléchargé à partir du référentiel mentionné dans l'avant-propos. Si vous ne l'avez pas fait, s'il vous plaît Fais le maintenant. Il est possible d'effectuer avec n'importe quel navigateur et même avec R :

Code (PageIndex{11}) (Python) :

download.file("http://ashipunov.info/data/mydata.txt","data/mydata.txt")

(Entre parenthèses, la partie gauche correspond à l'URL tandis que la droite indique à R comment placer et nommer le fichier téléchargé.)

Alternativement, vous pouvez vérifier votre fichier directement à partir de l'URL avec url.show(), puis utiliser read.table() à partir de la même URL.

Le moment est enfin venu de charger les données dans R. Nous savons que toutes les colonnes ont des noms, et donc utilisent head=TRUE, et savons également que le délimiteur est le point-virgule, c'est pourquoi nous utilisons sep=";":

Code (PageIndex{12}) (Python) :

mydata <- read.table("data/mydata.txt", sep=";", head=TRUE)

Immédiatement après avoir chargé les données, nous devons vérifier le nouvel objet. Il y a trois manières :

Code (PageIndex{13}) (Python) :

mydata <- read.table("data/mydata.txt", sep=";", head=TRUE)str(mydata)

La troisième façon consiste simplement à taper mydata mais ce n'est pas optimal car lorsque les données sont volumineuses, l'écran de votre ordinateur sera brouillé par le contenu. Les commandes head() et str() sont beaucoup plus efficaces.

Pour résumer, le fichier de données local doit être chargé dans R dans trois étapes:

  1. Assurez-vous que vous les données sont en place, avec la commande dir(), la saisie semi-automatique ou via un navigateur Web ;

  2. Regarde sur les données avec la commande file.show() ou url.show() et déterminer sa structure ;

  3. Charge avec la commande read.table() en utilisant les options appropriées (voir ci-dessous).

Comment charger des données depuis Internet

Le chargement des données distantes s'effectue en trois étapes identiques à celles décrites ci-dessus. Cependant, comme les données ne sont pas sur disque mais ailleurs, pour vérifier leur présence, le meilleur moyen est de ouvrez-le dans le navigateur Internet en utilisant l'URL qui doit vous être communiquée ; cela constitue également la deuxième étape car vous verrez sa structure dans la fenêtre du navigateur. Il est également possible de vérifier la structure avec la commande :

Code (PageIndex{14}) (Python) :

url.show("http://ashipunov.info/data/mydata.txt")

Ensuite, vous pouvez exécuter read.table() mais avec l'URL au lieu du nom du fichier :

Code (PageIndex{15}) (Python) :

read.table("http://ashipunov.info/data/mydata.txt", sep=";", head=TRUE)

(Ici et ci-dessous, nous sauterons parfois l'étape de création d'un nouvel objet. Cependant, n'oubliez pas que vous devez créer un nouvel objet si vous souhaitez utiliser les données dans R plus tard. Sinon, le contenu sera affiché et immédiatement oublié.)

Comment utiliser read.table()

Parfois, vous voulez que R "ingère" non seulement les noms de colonnes mais aussi les noms de lignes :

Code (PageIndex{16}) (Python) :

read.table("data/mydata1.txt", head=TRUE)

(Fichier mydata1.txt(^{[5]}) est construit de manière inhabituelle : sa première ligne comporte trois éléments tandis que toutes les autres lignes comportent chacune quatre éléments délimités par le symbole de tabulation—« grand espace invisible ». N'oubliez pas de vérifier cela au préalable, par exemple en utilisant la commande file.show() ou url.show().)

Parfois, il y a à la fois des espaces (à l'intérieur des cellules) et des tabulations (entre les cellules) :

Code (PageIndex{17}) (Python) :

read.table("data/mydata2.txt", sep=" ", quote="", head=TRUE)

Si nous exécutons read.table() sans l'option sep=" " (qui est "le séparateur est un onglet"), R donnera une erreur. Essayez-le. Mais pourquoi cela a-t-il fonctionné pour mydata1.txt ? C'est parce que le défaut le séparateur est tous les deux espace et/ou tabulation. Si l'un d'eux est utilisé comme partie de données, l'autre doit être indiqué explicitement comme séparateur.

Notez également que puisque les noms de lignes contiennent des guillemets, les guillemets doivent être désactivés, sinon les données seront lues en silence de manière incorrecte.

Comment savoir quel est le séparateur ici, tabulation ou espace ? C'est généralement simple car la plupart des éditeurs, des navigateurs et des commandes file.show() / url.show() visualisent la tabulation comme un espace beaucoup plus large qu'une seule lettre. Cependant, n'oubliez pas d'utiliser une police à espacement fixe dans votre logiciel, d'autres polices peuvent être trompeuses.

Parfois, les nombres ont une virgule comme séparateur décimal (il s'agit d'une autre norme mondiale). Pour saisir ce type de données, utilisez l'option dec :

Code (PageIndex{18}) (Python) :

read.table("data/mydata3.txt", dec=", se=";", h=T)

(Veuillez noter les raccourcis. Les raccourcis évitent de taper mais peuvent être dangereux s'ils correspondent à plusieurs noms possibles. Il n'y a qu'un seul argument read.table() qui commence par se, mais plusieurs d'entre eux commencent par s (par exemple, skip) ; par conséquent, il est impossible de réduire davantage se, en s. Notez également que TRUE et FALSE peuvent être réduits respectivement en T et F (mais c'est le seul moyen possible) ; nous éviterons cela dans le livre cependant.)

Lorsque read.table() voit des colonnes de caractères, il les convertit en les facteurs (voir ci-dessous). Pour éviter ce comportement, utilisez l'option as.is=TRUE.

La commande scan() est similaire à read.table() mais lit toutes les données dans une seule « colonne » (un vecteur). Il a cependant une caractéristique unique :

Code (PageIndex{19}) (Python) :

analyse()

(Que s'est-il passé ici ? Tout d'abord, nous avons entré scan() avec premier argument vide, et R a changé son invite en nombres permettant de saisir des données numériques, élément après élément. Pour terminer, entrez ligne vide(^{[6]}. On peut coller ici des nombres pairs du presse-papiers !)

Comment charger des données binaires

Les fonctions du package étranger (il est installé par défaut) peuvent lire les données aux formats binaires MiniTab, S, SAS, SPSS, Stata, Systat et FoxPro DBF. Pour en savoir plus, vous voudrez peut-être l'appeler d'abord avec la bibliothèque de commandes (foreign), puis appeler help à propos de toutes ses commandes help (package=foreign).

R peut télécharger des images. Il existe plusieurs packages pour cela, l'un des plus développés est pixmap. R peut également télécharger des cartes SIG de différents formats, y compris ArcInfo (packages maps, maptools et autres).

R a son propre format binaire. Il est très rapide à écrire et à charger(^{[7]}) (utile pour le big data) mais impossible à utiliser avec un autre programme que R :

Code (PageIndex{20}) (Python) :

xx <- "apple"save(xx, file="xx.rd")exists("xx")rm(xx)exists("xx")dir()load("xx.rd")xx

(Ici, nous avons utilisé plusieurs nouvelles commandes. Pour enregistrer et charger des fichiers binaires, il faut respectivement les commandes save() et load() ; pour supprimer l'objet, il y a la commande rm(). Pour vous montrer que l'objet a été supprimé, nous avons utilisé la commande exist().)

Notez également que tout ce qui est écrit après le symbole "#" sur la même chaîne de texte est un commenter. R saute tous les commentaires sans lire.

Il existe de nombreuses interfaces qui connectent R aux bases de données, notamment MySQL, PostgresSQL et sqlite (il est possible d'appeler la dernière directement depuis R, voir la documentation des packages RSQLite et sqldf).

Mais ce dont la plupart des utilisateurs ont réellement besoin, c'est de charger le données de feuille de calcul fait avec MS Excel ou des programmes similaires (comme Gnumeric ou LibreOffice Calc). Il y a trois façons.

Première voie nous recommandons à tous utilisateurs de ce livre : convertir le fichier Excel en texte, puis passez à la commande read.table() expliquée ci-dessus(^{[8]}). Sur macOS, le meilleur moyen est probablement d'enregistrer les données d'une feuille de calcul sous forme de fichier texte délimité par des tabulations. Sous Windows et Linux, si vous copiez un morceau de feuille de calcul dans le presse-papiers, puis le collez dans l'éditeur de texte (y compris l'éditeur de script R), il devient le texte délimité par des tabulations. La même chose est possible dans macOS mais vous devrez utiliser un éditeur de terminal (comme nano).

Une autre façon consiste à utiliser des packages externes qui convertissent les feuilles de calcul binaires "à la volée". L'un est le package readxl avec la commande principale read_excel(), un autre est le package xlsx avec la commande principale read.xlsx(). Veuillez noter que ces packages ne sont pas disponibles par défaut, vous devez donc Télécharger et installer (voir ci-dessous pour les explications).

Comment charger les données du presse-papiers

La troisième façon consiste à utiliser le presse-papiers. C'est assez simple : sous Linux ou Windows vous devrez sélectionner données dans la feuille de calcul ouverte, copie dans le presse-papiers, puis dans la fenêtre R taper commande comme :

Code (PageIndex{21}) (Python) :

read.table("clipboard", sep=" ", head=TRUE)

Sur macOS, c'est légèrement différent :

Code (PageIndex{22}) (Python) :

read.table(pipe("pbpaste"), sep=" ", head=TRUE)

(Ignorez les avertissements concernant les « lignes incomplètes » ou la « connexion fermée ». Package clipr unifie le travail avec le presse-papiers sur les principaux systèmes d'exploitation.)

La « manière du presse-papiers » est particulièrement efficace lorsque vos données proviennent de logiciels non typiques. Notez également que saisir scan() puis coller à partir du presse-papiers (voir ci-dessus) fonctionne de la même manière sur tous les systèmes.

En résumant ce qui précède, le workflow de données recommandé dans R pourrait ressembler à :

  1. Saisir les données dans la feuille de calcul ;

  2. Enregistrez-le sous forme de fichier texte avec des délimiteurs connus (les tabulations et les points-virgules sont préférables), les en-têtes et les noms de lignes (si nécessaire) ;

  3. Chargez-le dans R avec read.table();

  4. Si vous devez modifier les données dans R, écrivez-les ensuite dans le fichier externe en utilisant la commande write.table() (voir ci-dessous);

  5. Ouvrez-le à nouveau dans le tableur et passez au tour suivant.

L'un des grands avantages de ce flux de travail est la séparation entre l'édition et le traitement des données.

Comment modifier des données dans R

S'il est nécessaire de modifier des objets existants, vous pouvez Éditer via R. Nous ne le recommandons cependant pas, les feuilles de calcul et les éditeurs de texte sont beaucoup plus avancés que les outils internes de R.

Néanmoins, il existe un tableur sous-programme intégré dans R qui est configuré pour éditer des objets de type table (matrices ou trames de données). Pour le démarrer sur la matrice bb (voir ci-dessus), entrez la commande fix(bb) et éditez "en place". Tout ce que vous entrez changera immédiatement votre objet. C'est quelque peu contradictoire avec les principes de R donc il y a la fonction similaire edit() qui ne change pas l'objet mais les sorties le résultat à la fenêtre R.

Pour les autres types d'objets (pas de type table), les commandes fix() / edit() appellent un éditeur de texte interne (sous Windows ou macOS) ou externe (sous Linux). Pour utiliser un éditeur externe, vous devrez peut-être fournir un argument supplémentaire, edit(..., editor="name") où name pourrait être n'importe quel éditeur de texte disponible dans le système.

R sur Linux a l'éditeur vi par défaut mais il est trop avancé pour le débutant(^{[9]}); nous vous recommandons d'utiliser nano à la place(^{[10]}). De plus, il existe une commande pico() qui est généralement égale à edit(..., editor="nano"). nano editor est généralement disponible également via le terminal macOS.

Comment enregistrer les résultats

Les débutants dans R copient simplement les résultats du travail (comme les sorties de tests statistiques) de la console R dans un fichier texte. Cela suffit si vous êtes débutant. Tôt ou tard, cependant, il devient nécessaire de sauvegarder des objets plus volumineux (comme des blocs de données) :

Code (PageIndex{23}) (Python) :

write.table(file="trees.txt", arbres, row.names=FALSE, sep=" ", quote=FALSE)

(Le fichier tree.txt, qui est créé à partir de la trame de données interne des arbres, sera écrit dans le répertoire de travail.)

Soyez très prudent avec write.table() car R est parfaitement silencieux si le fichier du même nom tree.txt est déjà là. Au lieu de vous donner un avertissement, il l'écrase simplement !

D'ailleurs, "données internes" signifie qu'elles sont accessibles depuis l'intérieur de R directement, sans chargement préalable. Vous voudrez peut-être vérifier quelles données internes sont disponibles avec la commande data().

Alors qu'un scan() est une variante à vecteur unique de read.table(), la commande write() est la variante à vecteur unique de write.table().

C'est maintenant le bon moment pour parler de conventions de nom de fichier dans ce livre. Nous vous recommandons fortement de suivre ces règles simples :

  1. Utilisez uniquement des lettres anglaises minuscules, des chiffres et des traits de soulignement pour les noms de fichiers et de répertoires (ainsi que le point, mais uniquement pour séparer l'extension de fichier).

  2. N'utilisez pas de majuscules, d'espaces et d'autres symboles !

  3. Faites vos noms courts, de préférence plus courts que 15 à 20 symboles.

  4. Pour les fichiers de commande R (script), utilisez l'extension *.r

D'ailleurs, pour le travail confortable en R, il est fortement recommandé de modifier les options de votre système d'exploitation qui lui permettent de masquer les extensions de fichiers. Sur macOS, allez dans les préférences du Finder, choisissez l'onglet Avancé et sélectionner la case appropriée. Sous Windows, cliquez sur l'onglet Afficher dans l'explorateur de fichiers, choisissez Options, puis Afficher à nouveau, désélectionner case appropriée et appliquez-la à tous les dossiers. Linux, en règle générale, ne cache pas les extensions de fichiers.

Mais que faire si nous devons écrire dans le fichier externe nos résultats (comme la sortie du test statistique) ? Il y a la commande lavabo() :

Code (PageIndex{24}) (Python) :

lavabo("1.txt", split=TRUE)2+2sink()

(Ici, la chaîne "[1] 4" sera écrite dans le fichier externe.),

Nous avons spécifié l'argument split=TRUE car nous voulions voir le résultat à l'écran. Spécifiez également append=TRUE si vous voulez ajouter sortie dans le fichier existant. Pour arrêter de couler, utilisez lavabo() sans arguments. Assurez-vous de toujours fermer le lavabo () !

Il existe de nombreux outils et packages externes qui améliorent R pour se comporter comme des fonctionnalités complètes système de rapport qui non seulement calcule quelque chose pour vous, mais vous aide également à écrire les résultats. L'un des plus simples est le script shell Rresults (http://ashipunov.info/shipunov/r) qui fonctionne sur macOS et Linux. L'annexe du livre explique le système Sweave. Il y a aussi des tricots et bien plus encore.

Histoire et scénario

Pour voir ce que vous avez tapé pendant la session R actuelle, exécutez history()(^{[11]}):

Code (PageIndex{25}) (Python) :

history(100) # 100 dernières commandeshistory(Inf) # toutes les commandes de sessionhistory(p="plot") # dernières commandes de tracé

Si tu veux enregistrer votre historique de commandes, utilisez savehistory() avec le nom de fichier approprié (entre guillemets) comme argument(^{[12]}).

Pendant que vous travaillez avec ce livre, c'est une bonne idée d'utiliser savehistory() et enregistrer toutes les commandes de chaque session R dans le fichier nommé, en disant, par la date (comme 20170116.r) et stockez ce fichier dans votre dossier de travail.

Pour ce faire sur macOS, utilisez le menu R -> Préférences -> Démarrage -> Historique, décochez Lire le fichier d'historique au démarrage et entrez le nom du fichier d'historique d'aujourd'hui. Lorsque vous fermez R, le fichier apparaîtra dans votre répertoire de travail.

Pour enregistrer tous les objets dans le fichier binaire, tapez save.image(). Vous pouvez l'utiliser si, par exemple, vous expérimentez avec R.

R permet de créer scripts qui pourrait être exécuté plus tard pour reproduire ton travail. En fait, les scripts R peuvent être écrits dans n'importe quel éditeur de texte(^{[13]}).

Dans l'annexe, il y a beaucoup plus sur les scripts R, mais ce qui suit vous aidera à créer votre propre premier :

  1. Ouvrez l'éditeur de texte ou tapez simplement file.edit("hello.r")(^{[14]})

  2. Écrivez-y la chaîne print("Hello, world!")

  3. Enregistrez le fichier sous le nom hello.r dans votre répertoire de travail

  4. Appelez-le depuis R en utilisant la commande source("hello.r")

  5. ... et vous verrez [1] "Hello, world!" dans la console R comme si vous l'aviez tapé.

(En fait, vous pouvez même taper le script "Hello world!" sans print(), R comprendra quoi faire.)

Ensuite, chaque fois que vous ajoutez une commande R à hello.r, vous verrez de plus en plus de résultats. Essayer il.

Pour voir l'entrée (commandes) et la sortie (résultats) ensemble, tapez source("hello.r", echo=TRUE).

Les scripts sont la « fonctionnalité qui tue » de R. Si tous vos fichiers de données sont en place et que le script R est créé, vous pouvez facilement revenir à vos calculs des années plus tard ! De plus, d'autres peuvent faire exactement la même chose avec vos données et donc votre recherche devient entièrement reproductible. De plus, si vous constatez que vos données doivent être modifiées, vous exécutez le même script et il affichera des résultats qui prendront en compte toutes les modifications.

Command source() permet de charger des commandes non seulement à partir d'un fichier local mais également à partir d'Internet. Il vous suffit de remplacer le nom du fichier par l'URL.

Les références

1. Au fait, si vous voulez le nombre d'Euler, e, tapez exp(1).

2. Et aussi comme l'éditeur qui est intégré dans R pour Windows ou dans l'interface graphique R macOS, ou l'éditeur du package rite R, mais ne pas des logiciels bureautiques comme MS Word ou Excel !

3. Une autre possibilité consiste à définir le répertoire de travail dans les préférences (cela est assez différent d'un système d'exploitation à l'autre) mais ce n'est pas la meilleure solution car vous pourriez vouloir (et voudrez probablement) différents répertoires de travail pour différentes tâches.

4. Il existe un package rio qui peut déterminer la structure des données.

5. Encore une fois, téléchargez-le d'abord à partir d'Internet dans le sous-répertoire de données. Alternativement, remplacez le sous-répertoire par l'URL et chargez-le directement dans R, bien sûr, après avoir vérifié la structure.

6. Sur macOS, saisissez deux fois Entrée.

7. Avec les commandes dput() et dget(), R enregistre et charge également des représentations textuelles d'objets.

8. C'est un peu la blague du mathématicien qui, pour faire bouillir la bouilloire pleine d'eau, la vidait d'abord et donc réduire le problème à un problème déjà résolu!

9. Si, par hasard, il a démarré et que vous ne savez pas comment quitter, appuyez sur la majuscule ZQ.

10. Dans nano, utilisez Ctrl+O pour enregistrer vos modifications et Ctrl+X pour quitter.

11. Ne fonctionne pas sur macOS graphique.

12. Sous macOS graphique, cette commande n'est pas accessible et vous devez utiliser le menu de l'application.

13. Vous pouvez également utiliser la commande savehistory() pour créer un script de « démarrage ».

14. Sous Windows et macOS, cela ouvrira l'éditeur interne ; sous Linux, il est préférable de définir l'option de l'éditeur manuellement, par exemple, file.edit("hello.r", editor="geany").


Relation de récurrence non homogène et solutions particulières

Une relation de récurrence est dite non homogène si elle est de la forme

$F_n = AF_ + BF_ + f(n)$ où $f(n) e 0$

Sa relation de récurrence homogène associée est $F_n = AF_ + BF_$

La solution $(a_n)$ d'une relation de récurrence non homogène comporte deux parties.

La première partie est la solution $(a_h)$ de la relation de récurrence homogène associée et la seconde partie est la solution particulière $(a_t)$.

La résolution de la première partie est effectuée en utilisant les procédures décrites dans la section précédente.

Pour trouver la solution particulière, nous trouvons une solution d'essai appropriée.

Soit $f(n) = cx^n$ soit $x^2 = Ax + B$ l'équation caractéristique de la relation de récurrence homogène associée et soit $x_1$ et $x_2$ ses racines.

Si $x e x_1$ et $x e x_2$, alors $a_t = Ax^n$

Si $x = x_1$, $x e x_2$, alors $a_t = Anx^n$

Si $x = x_1 = x_2$, alors $a_t = An^2x^n$

Exemple

Soit une relation de récurrence non homogène $F_n = AF_ + BF_ + f(n)$ avec des racines caractéristiques $x_1 = 2$ et $x_2 = 5$. Les solutions d'essai pour différentes valeurs possibles de $f(n)$ sont les suivantes &moins

f(n) Solutions d'essai
4 UNE
5.2 n An2 n
8.5 n An5 n
4 n A4 n
2n 2 +3n+1 Un 2 +Bn+C

Résoudre la relation de récurrence $F_n = 3F_ + 10F_ + 7.5^n$ où $F_0 = 4$ et $F_1 = 3$

Il s'agit d'une relation linéaire non homogène, où l'équation homogène associée est $F_n=3F_+10F_$ et $f(n)=7.5^n$

L'équation caractéristique de sa relation homogène associée est &moins

Donc $a_h = a.5^n + b.(-2)^n$ , où a et b sont des constantes.

Puisque $f(n) = 7.5^n$, c'est-à-dire de la forme $c.x^n$, une solution d'essai raisonnable de at sera $Anx^n$

Après avoir mis la solution dans la relation de récurrence, on obtient &moins

$An5^n = 3A(n – 1)5^ + 10A(n – 2)5^ + 7.5^n$

Diviser les deux côtés par 5$^$, on obtient

$An5^2 = 3A(n - 1)5 + 10A(n - 2)5^0 + 7.5^2$

Ou, $25An = 15An - 15A + 10An - 20A + 175$

La solution de la relation de récurrence peut être écrite comme &moins

En mettant les valeurs de $F_0 = 4$ et $F_1 = 3$, dans l'équation ci-dessus, nous obtenons $a = -2$ et $b = 6$


La définition du langage R est pratique pour répondre à ces types de questions :

R a trois opérateurs d'indexation de base, avec la syntaxe affichée par les exemples suivants

Pour les vecteurs et les matrices, les formes [[ sont rarement utilisées, bien qu'elles présentent de légères différences sémantiques par rapport à la forme [ (par exemple, elle supprime tout attribut de noms ou dimnames, et cette correspondance partielle est utilisée pour les indices de caractère). Lors de l'indexation de structures multidimensionnelles avec un seul index, x[[i]] ou x[i] renverra le ième élément séquentiel de x .

Pour les listes, on utilise généralement [[ pour sélectionner n'importe quel élément, alors que [ renvoie une liste des éléments sélectionnés.

La forme [[ ne permet de sélectionner qu'un seul élément à l'aide d'indices entiers ou de caractères, alors que [ permet l'indexation par vecteurs. Notez cependant que pour une liste, l'index peut être un vecteur et chaque élément du vecteur est appliqué tour à tour à la liste, le composant sélectionné, le composant sélectionné de ce composant, et ainsi de suite. Le résultat est toujours un élément unique.

Les différences significatives entre les deux méthodes sont la classe des objets qu'elles renvoient lorsqu'elles sont utilisées pour l'extraction et si elles peuvent accepter une plage de valeurs, ou simplement une valeur unique lors de l'affectation.

Considérons le cas de l'extraction de données sur la liste suivante :

Supposons que nous voudrions extraire la valeur stockée par bool de foo et l'utiliser dans une instruction if(). Cela illustrera les différences entre les valeurs de retour de [] et [[]] lorsqu'elles sont utilisées pour l'extraction de données. La méthode [] retourne des objets de classe list (ou data.frame si foo était un data.frame) tandis que la méthode [[]] retourne des objets dont la classe est déterminée par le type de leurs valeurs.

Ainsi, l'utilisation de la méthode [] donne les résultats suivants :

C'est parce que la méthode [] a renvoyé une liste et qu'une liste n'est pas un objet valide à passer directement dans une instruction if(). Dans ce cas, nous devons utiliser [[]] car il renverra l'objet "nu" stocké dans 'bool' qui aura la classe appropriée :

La deuxième différence est que l'opérateur [] peut être utilisé pour accéder à un intervalle d'emplacements dans une liste ou de colonnes dans une trame de données tandis que l'opérateur [[]] est limité à l'accès à un Célibataire fente ou colonne. Considérons le cas de l'affectation de valeur à l'aide d'une deuxième liste, bar() :

Disons que nous voulons écraser les deux derniers emplacements de foo avec les données contenues dans bar. Si nous essayons d'utiliser l'opérateur [[]], voici ce qui se passe :

En effet, [[]] est limité à l'accès à un seul élément. Nous devons utiliser [] :

Notez que même si la mission a réussi, les emplacements dans foo ont conservé leur nom d'origine.

Les doubles crochets accèdent à une liste élément, tandis qu'un seul crochet vous renvoie une liste avec un seul élément.

Ma modification (semblable à la merde) à afficher en utilisant tidyverse / ronronnement :

[] extrait une liste, [[]] extrait des éléments dans la liste

Ajoutant juste ici que [[ est également équipé pour indexation récursive.

Cela a été suggéré dans la réponse de @JijoMatthew mais n'a pas été exploré.

Comme indiqué dans ?"[[" , une syntaxe comme x[[y]] , où length(y) > 1 , est interprétée comme :

Notez que ce ne fait pas changer ce qui devrait être votre principal point à retenir sur la différence entre [ et [[ -- à savoir, que le premier est utilisé pour sous-ensemble, et ce dernier est utilisé pour extraire éléments de liste unique.

Pour obtenir la valeur 3, on peut faire :

Pour en revenir à la réponse de @JijoMatthew ci-dessus, rappelez-vous r :

En particulier, cela explique les erreurs que nous avons tendance à avoir lors d'une mauvaise utilisation de [[ , à savoir :

Erreur dans r[[1:3]] : l'indexation récursive a échoué au niveau 2

Étant donné que ce code a en fait essayé d'évaluer r[[1]][[2]][[3]] , et que l'imbrication de r s'arrête au niveau un, la tentative d'extraction par indexation récursive a échoué à [[2]] , c'est-à-dire , au niveau 2.

Erreur dans r[[c("foo", "far")]] : indice hors limites

Ici, R recherchait r[["foo"]][["far"]] , qui n'existe pas, nous obtenons donc l'erreur d'indice hors limites.

Ce serait probablement un peu plus utile/cohérent si ces deux erreurs donnaient le même message.

Étant terminologique, l'opérateur [[ extraits l'élément d'une liste alors que l'opérateur [ prend sous-ensemble d'une liste.

Les deux sont des moyens de sous-ensemble. La parenthèse unique renverra un sous-ensemble de la liste, qui sera en soi une liste. c'est-à-dire : il peut contenir ou non plus d'un élément. D'un autre côté, un double crochet ne renverra qu'un seul élément de la liste.

-Un support unique nous donnera une liste. Nous pouvons également utiliser un seul crochet si nous souhaitons renvoyer plusieurs éléments de la liste. considérez la liste suivante: -

Maintenant, veuillez noter la façon dont la liste est renvoyée lorsque j'essaie de l'afficher. Je tape r et j'appuie sur Entrée

Maintenant, nous allons voir la magie du support unique : -

ce qui est exactement le même que lorsque nous avons essayé d'afficher la valeur de r à l'écran, ce qui signifie que l'utilisation d'un seul crochet a renvoyé une liste, où à l'index 1, nous avons un vecteur de 10 éléments, puis nous avons deux autres éléments avec des noms foo et loin. Nous pouvons également choisir de donner un seul index ou nom d'élément en entrée de la parenthèse unique. par exemple:

Dans cet exemple, nous avons donné un index "1" et en retour obtenu une liste avec un élément (qui est un tableau de 10 nombres)

Dans l'exemple ci-dessus, nous avons donné un index "2" et en retour obtenu une liste avec un élément

Dans cet exemple, nous avons passé le nom d'un élément et en retour, une liste a été renvoyée avec un élément.

Vous pouvez également passer un vecteur de noms d'éléments comme :

Dans cet exemple, nous avons passé un vecteur avec deux noms d'élément "foo" et "far"

En retour, nous avons obtenu une liste avec deux éléments.

En bref, une seule parenthèse vous renverra toujours une autre liste avec un nombre d'éléments égal au nombre d'éléments ou au nombre d'indices que vous passez dans la seule parenthèse.

En revanche, une double parenthèse renverra toujours un seul élément. Avant de passer à la double parenthèse, une note à garder à l'esprit. REMARQUE : LA DIFFÉRENCE MAJEURE ENTRE LES DEUX EST QUE LE SUPPORT UNIQUE VOUS RETOURNE UNE LISTE AVEC AUSSI D'ÉLÉMENTS QUE VOUS LE SOUHAITEZ ALORS QU'UN SUPPORT DOUBLE NE RETOURNERA JAMAIS DE LISTE. PLUTT UN SUPPORT DOUBLE NE RETOURNERA QU'UN SEUL ÉLÉMENT DE LA LISTE.

Je vais citer quelques exemples. Veuillez noter les mots en gras et y revenir une fois que vous avez terminé avec les exemples ci-dessous :

La double parenthèse vous renverra la valeur réelle à l'index. NE PAS retourner une liste)

pour les doubles crochets, si nous essayons de visualiser plus d'un élément en passant un vecteur, cela entraînera une erreur simplement parce qu'il n'a pas été conçu pour répondre à ce besoin, mais simplement pour renvoyer un seul élément.


Mathématiques de l'argent :Analyse des intérêts composés avec des applications


Ce site fait partie des objets d'apprentissage JavaScript E-labs pour la prise de décision. Les autres JavaScript de cette série sont classés sous différents domaines d'application dans la section MENU de cette page.

Intérêt composé : La valeur future (VF) d'un investissement en dollars à valeur actuelle (VA) portant intérêt à un taux annuel de r composé m fois par an pendant une période de t ans est :

FV = PV(1 + tr/m) mt ou

FV = PV(1 + i) n

où i = r/m est l'intérêt par période de composition et n = mt est le nombre de périodes de composition.

On peut résoudre pour la valeur actuelle PV pour obtenir :

PV = FV/(1 + tr/m) mt

Exemple numérique : pour un investissement de 20 000 $ sur 4 ans rapportant 8,5 % par an, avec intérêts réinvestis chaque mois, la valeur future est

FV = PV(1 + tr/m) tm = 20 000 (1 + 0,085/12) (12)(4) = 28 065,30 $

Notez que l'intérêt gagné est de 28 065,30 $ - 20 000 $ = 8 065,30 $ - considérablement plus que l'intérêt simple correspondant.

Taux d'intérêt effectif : si l'argent est investi à un taux annuel r, composé m fois par an, le taux d'intérêt effectif est :

reff = (1 + r/m) m - 1.

This is the interest rate that would give the same yield if compounded only once per year. In this context r is also called the nominal rate, and is often denoted as r nom .

Numerical Example: A CD paying 9.8% compounded monthly has a nominal rate of r nom = 0.098, and an effective rate of:

r eff =(1 + r nom /m) m = (1 + 0.098/12) 12 - 1 = 0.1025.

Thus, we get an effective interest rate of 10.25%, since the compounding makes the CD paying 9.8% compounded monthly really pay 10.25% interest over the course of the year.

Mortgage Payments Components: Let where P = principal, r = interest rate per period, n = number of periods, k = number of payments, R = monthly payment, and D = debt balance after K payments, then

R = P r / [1 - (1 + r) -n ]

et

D = P (1 + r) k - R [(1 + r) k - 1)/r]

Accelerating Mortgage Payments Components: Suppose one decides to pay more than the monthly payment, the question is how many months will it take until the mortgage is paid off? The answer is, the rounded-up, where:

n = log[x / (x P r)] / log (1 + r)

where Log is the logarithm in any base, say 10, or e.

Future Value (FV) of an Annuity Components: Ler where R = payment, r = rate of interest, and n = number of payments, then

FV = [ R(1 + r) n - 1 ] / r

Future Value for an Increasing Annuity: It is an increasing annuity is an investment that is earning interest, and into which regular payments of a fixed amount are made. Suppose one makes a payment of R at the end of each compounding period into an investment with a present value of PV, paying interest at an annual rate of r compounded m times per year, then the future value after t years will be

FV = PV(1 + i) n + [ R ( (1 + i) n - 1 ) ] / i

where i = r/m is the interest paid each period and n = m t is the total number of periods.

Numerical Example: You deposit $100 per month into an account that now contains $5,000 and earns 5% interest per year compounded monthly. After 10 years, the amount of money in the account is:

FV = PV(1 + i) n + [ R(1 + i) n - 1 ] / i =
5,000(1+0.05/12) 120 + [100(1+0.05/12) 120 - 1 ] / (0.05/12) = $23,763.28

Value of a Bond: Let N = number of year to maturity, I = the interest rate, D = the dividend, and F = the face-value at the end of N years, then the value of the bond is V, where

V = (D/i) + (F - D/i)/(1 + i) N

V is the sum of the value of the dividends and the final payment.

You may like to perform some sensitivity analysis for the "what-if" scenarios by entering different numerical value(s), to make your "good" strategic decision.



Mathematics of Money:Compound Interest Analysis With Applications


This site is a part of the JavaScript E-labs learning objects for decision making. Other JavaScript in this series are categorized under different areas of applications in the MENU section on this page.

Compound Interest: The future value (FV) of an investment of present value (PV) dollars earning interest at an annual rate of r compounded m times per year for a period of t years is:

FV = PV(1 + r/m) mt or

FV = PV(1 + i) n

where i = r/m is the interest per compounding period and n = mt is the number of compounding periods.

One may solve for the present value PV to obtain:

PV = FV/(1 + r/m) mt

Numerical Example: For 4-year investment of $20,000 earning 8.5% per year, with interest re-invested each month, the future value is

FV = PV(1 + r/m) mt = 20,000(1 + 0.085/12) (12)(4) = $28,065.30

Notice that the interest earned is $28,065.30 - $20,000 = $8,065.30 -- considerably more than the corresponding simple interest.

Effective Interest Rate: If money is invested at an annual rate r, compounded m times per year, the effective interest rate is:

r eff = (1 + r/m) m - 1.

This is the interest rate that would give the same yield if compounded only once per year. In this context r is also called the nominal rate, and is often denoted as r nom .

Numerical Example: A CD paying 9.8% compounded monthly has a nominal rate of r nom = 0.098, and an effective rate of:

r eff =(1 + r nom /m) m = (1 + 0.098/12) 12 - 1 = 0.1025.

Thus, we get an effective interest rate of 10.25%, since the compounding makes the CD paying 9.8% compounded monthly really pay 10.25% interest over the course of the year.

Mortgage Payments Components: Let where P = principal, r = interest rate per period, n = number of periods, k = number of payments, R = monthly payment, and D = debt balance after K payments, then

R = P r / [1 - (1 + r) -n ]

et

D = P (1 + r) k - R [(1 + r) k - 1)/r]

Accelerating Mortgage Payments Components: Suppose one decides to pay more than the monthly payment, the question is how many months will it take until the mortgage is paid off? The answer is, the rounded-up, where:

n = log[x / (x P r)] / log (1 + r)

where Log is the logarithm in any base, say 10, or e.

Future Value (FV) of an Annuity Components: Ler where R = payment, r = rate of interest, and n = number of payments, then

FV = [ R(1 + r) n - 1 ] / r

Future Value for an Increasing Annuity: It is an increasing annuity is an investment that is earning interest, and into which regular payments of a fixed amount are made. Suppose one makes a payment of R at the end of each compounding period into an investment with a present value of PV, paying interest at an annual rate of r compounded m times per year, then the future value after t years will be

FV = PV(1 + i) n + [ R ( (1 + i) n - 1 ) ] / i

where i = r/m is the interest paid each period and n = m t is the total number of periods.

Numerical Example: You deposit $100 per month into an account that now contains $5,000 and earns 5% interest per year compounded monthly. After 10 years, the amount of money in the account is:

FV = PV(1 + i) n + [ R(1 + i) n - 1 ] / i =
5,000(1+0.05/12) 120 + [100(1+0.05/12) 120 - 1 ] / (0.05/12) = $23,763.28

Value of a Bond: Let N = number of year to maturity, I = the interest rate, D = the dividend, and F = the face-value at the end of N years, then the value of the bond is V, where

V = (D/i) + (F - D/i)/(1 + i) N

V is the sum of the value of the dividends and the final payment.

You may like to perform some sensitivity analysis for the "what-if" scenarios by entering different numerical value(s), to make your "good" strategic decision.



Writing Your Own Functions

To recap, you already have working R code that simulates rolling a pair of dice:

You can retype this code into the console anytime you want to re-roll your dice. However, this is an awkward way to work with the code. It would be easier to use your code if you wrapped it into its own function, which is exactly what we’ll do now. We’re going to write a function named roll that you can use to roll your virtual dice. When you’re finished, the function will work like this: each time you call roll() , R will return the sum of rolling two dice:

Functions may seem mysterious or fancy, but they are just another type of R object. Instead of containing data, they contain code. This code is stored in a special format that makes it easy to reuse the code in new situations. You can write your own functions by recreating this format.

The Function Constructor

Every function in R has three basic parts: a name, a body of code, and a set of arguments. To make your own function, you need to replicate these parts and store them in an R object, which you can do with the function function. To do this, call function() and follow it with a pair of braces, <> :

function will build a function out of whatever R code you place between the braces. For example, you can turn your dice code into a function by calling:

Notice that I indented each line of code between the braces. This makes the code easier for you and me to read but has no impact on how the code runs. R ignores spaces and line breaks and executes one complete expression at a time.

Just hit the Enter key between each line after the first brace, < . R will wait for you to type the last brace, >, before it responds.

Don’t forget to save the output of function to an R object. This object will become your new function. To use it, write the object’s name followed by an open and closed parenthesis:

You can think of the parentheses as the “trigger” that causes R to run the function. If you type in a function’s name without the parentheses, R will show you the code that is stored inside the function. If you type in the name avec the parentheses, R will run that code:

The code that you place inside your function is known as the body of the function. When you run a function in R, R will execute all of the code in the body and then return the result of the last line of code. If the last line of code doesn’t return a value, neither will your function, so you want to ensure that your final line of code returns a value. One way to check this is to think about what would happen if you ran the body of code line by line in the command line. Would R display a result after the last line, or would it not?

Here’s some code that would display a result:

And here’s some code that would not:

Do you notice the pattern? These lines of code do not return a value to the command line they save a value to an object.


1.1: R and Data - Mathematics

Prove that (n+1)! >2 n for all n>1.

Prove that cos(x-180n) = (-1) n cosx.

If a = 1 , then prove that d n a/dx n = (-1) n n!

Prove that 3n+2 < (n+4) 2 by using mathematical induction.

Prove that product of any three numbers ocurring one after the other is divisible by 6.

Prove that exactly one among n+10,n+12 and n+14 is divisible by 3,considering n is always an natural number.

Prove that cube of any three consecutive natural numbers is divisible by 9 using mathematical induction.

Prove by mathematical induction

Prove that the equation n(n 3 - 6n 2 +11n -6) is always divisible by 4 for n>3.Use mathematical induction.

Prove that 6 n + 10n - 6 contains 5 as a factor for all values of n by using mathematical induction.

Prove that (n+ 1/n) 3 > 2 3 for n being a natural number greater than 1 by using mathematical induction.

Prove that 2 n + 3 n < 5 n holds for n>1 .

Questions with solutions of problems (Advanced Set B)

Prove that (n+1)! >2 n for all n>1.

Let us assume this equation as equation 1).

Putting n=2 in equation 1),we get,

Since this is true,therefore the equation holds true for n=1.

Let us assume that equation holds true for n=m,

Now we have to prover that this equation holds true for n=m+1 ,i.e,

Multiply above equation by m+2

Prove that cos(x-180n) = (-1) n cosx.

Let us assume this equation as equation 1)

Putting n=1,in equation 1),we get

This is true,(try to recall trignometric properties),therefore this equation is satisfied for n=1.

Let us assume that this equation holds true for n=m.

cos(x-180m) = (-1) m cosx equation 2)

Now we need to prove that equation 2) also holds true for n=m+1

That is we need to prove cos(x-180(m+1))=(-1) m+1 cos(x)

LHS = cos(x- 180m - 180) =-cos(x-180m)

and also using equation 2)>

If a = 1 , then prove that d n a/dx n = (-1) n n!

Let us assume the equation given in the question as equation 1),

Since LHS = RHS ,therefore ,equation 1) holds true for n=1.

Let us assume that equation 1) holds true for n=m,

Therefore, d m a/dx m = (-1) m m! . -------equation 2)

Now,we need to prove that the equation holds true for n = m+1

differentiating equation 2) ,we get

d (d m a / dx m ) = d m+1 a/dx m+1

Let us assume the above equation as equation 1)

Putting n=1 ,in the equation ,we get

Hence,the equation holds true for n=1.

Let us assume that the equation holds true for n=m,

i.e. assume equation 2) holds true

Now,we need to prove that the equation holds true for n=m+1

After adding (2n+ 7) on RHS also LHS < RHS ,since RHS will be still greater than LHS after adding something.

Prove that product of any three numbers ocurring one after the other is divisible by 6.

Let us assume that the product of these numbers is n(n+1)(n+2)-----------------1)

Putting n=1 in equation 1) ,we get

Therefore,this is divisible by 6.

Assuming equation 1) holds true for n=m.

Now,we need to prove that equation 1) holds true for n=m + 1

We need to prove that (m+1)(m+2)(m+3) is divisible by 6.

Since we know that if two numbers are occuring one after the other exactly one among them is even and one among them is odd.

Therefore,in 3(m+1)(m+2),one of either (m+1) or (m+2) will be even and so will contsin atleast one two.Therefore 3(m+1)(m+2) will definitely contain a term of 6.

Prove that exactly one among n+10,n+12 and n+14 is divisible by 3,considering n is always an natural number.

Exactly one i.e 15 is divisible by 3.

Let us assume that that for n=m exactly one out of n+10,n+12,n+14 is divisible by 3

Case 1)Let us assume that for n=m ,m+10 was divisible by 3

We need to prove that for n=m+1 ,exactly one among them is divisible by 3.Putting m+1 in place of n ,we get

(m+1)+10=m+11=3k + 1 (not divisible by 3)

(m+1)+12=m+13= 3k+3 =3(k+1) (divisible by 3)

(m+1)+14=m+15=3k+5 (not divisible by 3)

Therefore,for n=m+1 also exactly one among the three,n+10,n+12 and n+14 is divisible by 3.

Similarly we can prove that exactly one among three of these is divisible by 3 by considering cases when n+12=3k and n+14 = 3k.

Prove that cube of any three consecutive natural numbers is divisible by 9 using mathematical induction.

Let us assume the three consecutive numbers as n,n+1 and n+2.

Therefore,according to the question,

n 3 +(n+1) 3 + (n+2) 3 ---------1) should be divisible by 9 .

Putting n=1 in equation 1),we get

equation 1) as equal to 36.

Since 36 is divisible by 9,therefore equation 1) is divisible by 9 for n=1.

Let us assume that equation 1) holds true for n=m.

Therefore,m 3 + (m+1) 3 + (m+2) 3 = 9k -----------------2) where k is a natural number

Now,we need to prove that equation 1) holds true for n=m+1.

Putting n=m+1 in equation 1)

We need to prove that equation 3) is a divisible by 9

Putting equation 2) in equation 3 , we get ,

(m+1) 3 +(m+2) 3 + (m+3) 3 = 9k - m 3 +(m+3) 3

We can see that for n=m+1 also equation 1) contains a factor of 9.

Prove by mathematical induction

Let us consider this equation as equation 1)

Putting n=1 in equation 1),we get

Then,equation 1) holds true for n=1

Let us assume that equation 1) is true for n=m

Now,we should prove that equation 1) is true also for n=m+1

i.e we need to prove sum of n terms equal to 1 ( 1 - 1 )

From equation 2),we can write the sum of first n terms as

Prove that the equation n(n 3 - 6n 2 +11n -6) is always divisible by 4 for n>3.Use mathematical induction.

This equation can be factorized as

Then equation 1) is divisible by 4.

Therefore,for n=1 ,equation 1) is satisfied.

Let us assume that for n=m equation 1) is divisible by 4.

m(m-1)(m-2)(m-3) = 4k where k is a natural number

Now,we need to prove that for n=m+1 also equation 1) is divisible by 4.

Putting n=m+1 in equation 1) we get

Equation 3) can be written as

=4k + 4 x product of natural numbers

Since for n=m+1 also equation 1) is divisible by 4.

Prove that 6 n + 10n - 6 contains 5 as a factor for all values of n by using mathematical induction.

Let us assume 6 n + 10n - 1 as equation 1)

Putting n=1 in equation 1),we get

Let us assume that equation 1) has 5 as a factor for n=m

therefore, 6 m + 10m - 6 = 5k ----------------2)

Now we need to prove that equation 1) is divisible by 5,for n=m+1

Putting n=m+1 in equation 1),we get

6 m+1 + 10(m+1) -6 = 6 m+1 + 10m +10 -6

6 m -1 = 5k -10m + 5 and put this in equation 3)>

Therefore,equation 1) contains a factor of 5,for n=m+1

Prove that (n+ 1/n) 3 > 2 3 for n being a natural number greater than 1 by using mathematical induction.

Let us assume (n+ 1/n) 3 > 2 3 as equation 1)

Putting n=1 in LHS of equation 1),we get

Since LHS > RHS ,therefore the equation is true for n=1.

Let us assume that the equation is true for n=m

Now,we need to proof that the equation is true for n=m+1

i.e we need to prove that ((m+1) + 1/(m+1)) 3 >2 3

1/m and 1/(m+1) are fractions,they are less less then 1they dont make any much difference

Adding m both the sides in equation 2),we get

Cubing both the sides we get

Prove that 2 n + 3 n < 5 n holds for n>1

Let us name the equation 2 n + 3 n > 5 n as equation 1) .

Noe putting n=2 ,in equation 1) we get

therefore,equation 1) holds true for n=2.

Now ,let us assume that equation 1 is true for n=m.

Now ,we need to prove that 2 n+1 + 3 n+1 < 5 n+1

Now,from equation 2),we know that,

Multiplying 5 in above equation,we get

We know that 2 m .5 > 2 m+1 and 3 m .5 > 3 m+1 since 5>2 and 5>3


Discrete Mathematics An Open Introduction

dis·crete / dis'krët.

Adjective: Individually separate and distinct.

Synonymes: separate - detached - distinct - abstract.

Defining discrete mathematics is hard because defining mathematics is hard. What is mathematics? The study of numbers? In part, but you also study functions and lines and triangles and parallelepipeds and vectors and …. Or perhaps you want to say that mathematics is a collection of tools that allow you to solve problems. What sort of problems? Okay, those that involve numbers, functions, lines, triangles, …. Whatever your conception of what mathematics is, try applying the concept of “discrete” to it, as defined above. Some math fundamentally deals with stuff that is individually separate and distinct.

In an algebra or calculus class, you might have found a particular set of numbers (maybe the set of numbers in the range of a function). You would represent this set as an interval: ([0,infty)) is the range of (f(x) = x^2) since the set of outputs of the function are all real numbers 0 and greater. This set of numbers is NOT discrete. The numbers in the set are not separated by much at all. In fact, take any two numbers in the set and there are infinitely many more between them which are also in the set. Discrete math could still ask about the range of a function, but the set would not be an interval. Consider the function which gives the number of children of each person reading this. What is the range? I'm guessing it is something like (<0, 1, 2, 3> ext<.>) Maybe 4 is in there too. But certainly there is nobody reading this that has 1.32419 children. This set est discrete because the elements are separate. Also notice that the inputs to the function are a discrete set as each input is an individual person. You would not consider fractional inputs (we don't care about anything (2/3) between a pair of readers).

One way to get a feel for the subject is to consider the types of problems you solve in discrete math. Here are a few simple examples:

Investigate! 1

Note: Throughout the text you will see Investigate! activities like this one. Answer the questions in these as best you can to give yourself a feel for what is coming next.

The most popular mathematician in the world is throwing a party for all of his friends. As a way to kick things off, they decide that everyone should shake hands. Assuming all 10 people at the party each shake hands with every other person (but not themselves, obviously) exactly once, how many handshakes take place?

At the warm-up event for Oscar's All Star Hot Dog Eating Contest, Al ate one hot dog. Bob then showed him up by eating three hot dogs. Not to be outdone, Carl ate five. This continued with each contestant eating two more hot dogs than the previous contestant. How many hot dogs did Zeno (the 26th and final contestant) eat? How many hot dogs were eaten all together?

After excavating for weeks, you finally arrive at the burial chamber. The room is empty except for two large chests. On each is carved a message (strangely in English):

You know exactly one of these messages is true. What should you do?

Back in the days of yore, five small towns decided they wanted to build roads directly connecting each pair of towns. While the towns had plenty of money to build roads as long and as winding as they wished, it was very important that the roads not intersect with each other (as stop signs had not yet been invented). Also, tunnels and bridges were not allowed. Is it possible for each of these towns to build a road to each of the four other towns without creating any intersections?

One reason it is difficult to define discrete math is that it is a very broad description which encapsulates a large number of subjects. In this course we will study four main topics: (the theory of ways things combine in particular, how to count these ways), , , and . However, there are other topics that belong under the discrete umbrella, including computer science, abstract algebra, number theory, game theory, probability, and geometry (some of these, particularly the last two, have both discrete and non-discrete variants).

Ultimately the best way to learn what discrete math is about is to fais il. Let's get started! Before we can begin answering more complicated (and fun) problems, we must lay down some foundation. We start by reviewing mathematical statements, sets, and functions in the framework of discrete mathematics.


Explanation

There are multiple ways of selecting data from R, most commonly people use positive/negative indices to select/unselect respectively. However, the same functionalities can be achieved by using TRUE/FALSE to select/unselect.

Considérez l'exemple suivant.

My solution shuffles the rows, then takes the first 75% of the rows as train and the last 25% as test. Super simples!

scorecard package has a useful function for that, where you can specify the ratio and seed

The test and train data are stored in a list and can be accessed by calling dt_list$train and dt_list$test

Below a function that create a list of sub-samples of the same size which is not exactly what you wanted but might prove usefull for others. In my case to create multiple classification trees on smaller samples to test overfitting :

Use caTools package in R sample code will be as follows:-

Use base R. Function runif generates uniformly distributed values from 0 to 1.By varying cutoff value (train.size in example below), you will always have approximately the same percentage of random records below the cutoff value.

The sample.split() function will add one extra column 'split1' to dataframe and 2/3 of the rows will have this value as TRUE and others as FALSE.Now the rows where split1 is TRUE will be copied into train and other rows will be copied to test dataframe.

Assuming df is your data frame, and that you want to create 75% train et 25% test

Then to create a train and test data frames

We can divide data into a particular ratio here it is 80% train and 20% in a test dataset.

Beware of sample for splitting if you look for reproducible results. If your data changes even slightly, the split will vary even if you use set.seed . For example, imagine the sorted list of IDs in you data is all the numbers between 1 and 10. If you just dropped one observation, say 4, sampling by location would yield a different results because now 5 to 10 all moved places.

An alternative method is to use a hash function to map IDs into some pseudo random numbers and then sample on the mod of these numbers. This sample is more stable because assignment is now determined by the hash of each observation, and not by its relative position.

sample size is not exactly 5000 because assignment is probabilistic, but it shouldn't be a problem in large samples thanks to the law of large numbers.


Voir la vidéo: Les data sciences - Quest-ce que cest? A quoi ça sert? (Décembre 2021).