Exercices

sur les fonctions

1. Créer une fonction affichePays() qui prend en paramètre un nom de pays et un continent, et qui l’affiche sur une ligne :

`pays (continent)`
affichePays <- function (pays, continent) {
    cat(pays, " (", continent, ")\n", sep = "")
}
affichePays("France", "Europe")
## France (Europe)

2. Ajouter un paramètre à cette fonction, qui sera l’année d’indépendance (avec la valeur NA par défaut) =

- si l'année est `NA`, alors on affichera

`pays (continent)`

- sinon, on affichera :

`pays (continent - indépendance en XXXX)`
affichePays <- function (pays, continent, indep = NA) {
    cat(pays, " (", continent, sep = "")
    if (!is.na(indep)) {
        cat(" - indépendant en", indep)
    }
    cat(")\n", sep = "")
}
affichePays("France", "Europe")
## France (Europe)
affichePays("France", "Europe", 843)
## France (Europe - indépendant en 843)
affichePays("France", "Europe", NA)
## France (Europe)

3. Créer une fonction avec les caractéristiques suivantes :

- Paramètres :
    - une valeur (population d'un pays)
    - un vecteur de valeur (population de plusieurs villes)
- Retour :
    - la ration entre la somme des valeurs du vecteur et la première valeur
- Par exemple :
    - `f(10, c(1, 2, 3))` renverra `.6`
ratio <- function (pop.pays, pop.villes) {
    # on ajoute des contrôles pour s'assurer que l'on passe bien des nombres
    if (!is.numeric(pop.pays) | !is.numeric(pop.villes)) {
        return (NULL)
    }
    return(sum(pop.villes, na.rm = TRUE) / pop.pays)
}
ratio(10, c(1, 2, 3))
## [1] 0.6
ratio("10", c(1, 2, 3))
## NULL
ratio(10, c(1, 2, NA))
## [1] 0.3
ratio(10, c(1, 2, "a"))
## NULL

world

A partir des données présentes dans le fichier world-liste.RData, répondre aux questions suivantes. Ces données concernent les pays dans le monde (à la fin du siècle dernier), et sont représentées sous forme de liste dans l’objet Country.liste.

load("donnees/World/world-liste.Rdata")

1. Donner le nombre de pays représentés

length(Country.liste)
## [1] 239

2. Calculer la population mondiale

Plusieurs possibilités :

  • Décomposition en 2 étapes :
p = sapply(Country.liste, function(e) {
    return(e$Population)
})
sum(as.numeric(p))
## [1] 6078749450
  • Idem avec Reduce sur p :
Reduce(function(a, b) { return (a+b)}, p, numeric(1))
## [1] 6078749450
  • En une étape :
sum(as.numeric(sapply(Country.liste, function (p) return(p$Population))))
## [1] 6078749450
  • Idem avec Reduce directement sur Country.liste :
res = Reduce(
    function (a, b) {
        a$Population = a$Population + b$Population
        return(a)
    },
    Country.liste,
    list(Population = numeric(1))
)
res
## $Population
## [1] 6078749450
  • Idem mais sans initialisation :
res = Reduce(
    function (a, b) {
        a$Population = as.numeric(a$Population) + b$Population
        return(a)
    },
    Country.liste
)
res$Population
## [1] 6078749450

3. Utiliser la fonction affichePays() créée précédemment dans une fonction anonyme, pour afficher les informations des pays (un pays par ligne)

invisible(
    lapply(
        Country.liste, 
        function(p) { 
            affichePays(p$Name, p$Continent, p$IndepYear) 
        }
    )
)
## Aruba (North America)
## Afghanistan (Asia - indépendant en 1919)
## Angola (Africa - indépendant en 1975)
## Anguilla (North America)
## Albania (Europe - indépendant en 1912)
## Andorra (Europe - indépendant en 1278)
## Netherlands Antilles (North America)
## United Arab Emirates (Asia - indépendant en 1971)
## Argentina (South America - indépendant en 1816)
## Armenia (Asia - indépendant en 1991)
## American Samoa (Oceania)
## Antarctica (Antarctica)
## French Southern territories (Antarctica)
## Antigua and Barbuda (North America - indépendant en 1981)
## Australia (Oceania - indépendant en 1901)
## Austria (Europe - indépendant en 1918)
## Azerbaijan (Asia - indépendant en 1991)
## Burundi (Africa - indépendant en 1962)
## Belgium (Europe - indépendant en 1830)
## Benin (Africa - indépendant en 1960)
## Burkina Faso (Africa - indépendant en 1960)
## Bangladesh (Asia - indépendant en 1971)
## Bulgaria (Europe - indépendant en 1908)
## Bahrain (Asia - indépendant en 1971)
## Bahamas (North America - indépendant en 1973)
## Bosnia and Herzegovina (Europe - indépendant en 1992)
## Belarus (Europe - indépendant en 1991)
## Belize (North America - indépendant en 1981)
## Bermuda (North America)
## Bolivia (South America - indépendant en 1825)
## Brazil (South America - indépendant en 1822)
## Barbados (North America - indépendant en 1966)
## Brunei (Asia - indépendant en 1984)
## Bhutan (Asia - indépendant en 1910)
## Bouvet Island (Antarctica)
## Botswana (Africa - indépendant en 1966)
## Central African Republic (Africa - indépendant en 1960)
## Canada (North America - indépendant en 1867)
## Cocos (Keeling) Islands (Oceania)
## Switzerland (Europe - indépendant en 1499)
## Chile (South America - indépendant en 1810)
## China (Asia - indépendant en -1523)
## Côte d’Ivoire (Africa - indépendant en 1960)
## Cameroon (Africa - indépendant en 1960)
## Congo, The Democratic Republic of the (Africa - indépendant en 1960)
## Congo (Africa - indépendant en 1960)
## Cook Islands (Oceania)
## Colombia (South America - indépendant en 1810)
## Comoros (Africa - indépendant en 1975)
## Cape Verde (Africa - indépendant en 1975)
## Costa Rica (North America - indépendant en 1821)
## Cuba (North America - indépendant en 1902)
## Christmas Island (Oceania)
## Cayman Islands (North America)
## Cyprus (Asia - indépendant en 1960)
## Czech Republic (Europe - indépendant en 1993)
## Germany (Europe - indépendant en 1955)
## Djibouti (Africa - indépendant en 1977)
## Dominica (North America - indépendant en 1978)
## Denmark (Europe - indépendant en 800)
## Dominican Republic (North America - indépendant en 1844)
## Algeria (Africa - indépendant en 1962)
## Ecuador (South America - indépendant en 1822)
## Egypt (Africa - indépendant en 1922)
## Eritrea (Africa - indépendant en 1993)
## Western Sahara (Africa)
## Spain (Europe - indépendant en 1492)
## Estonia (Europe - indépendant en 1991)
## Ethiopia (Africa - indépendant en -1000)
## Finland (Europe - indépendant en 1917)
## Fiji Islands (Oceania - indépendant en 1970)
## Falkland Islands (South America)
## France (Europe - indépendant en 843)
## Faroe Islands (Europe)
## Micronesia, Federated States of (Oceania - indépendant en 1990)
## Gabon (Africa - indépendant en 1960)
## United Kingdom (Europe - indépendant en 1066)
## Georgia (Asia - indépendant en 1991)
## Ghana (Africa - indépendant en 1957)
## Gibraltar (Europe)
## Guinea (Africa - indépendant en 1958)
## Guadeloupe (North America)
## Gambia (Africa - indépendant en 1965)
## Guinea-Bissau (Africa - indépendant en 1974)
## Equatorial Guinea (Africa - indépendant en 1968)
## Greece (Europe - indépendant en 1830)
## Grenada (North America - indépendant en 1974)
## Greenland (North America)
## Guatemala (North America - indépendant en 1821)
## French Guiana (South America)
## Guam (Oceania)
## Guyana (South America - indépendant en 1966)
## Hong Kong (Asia)
## Heard Island and McDonald Islands (Antarctica)
## Honduras (North America - indépendant en 1838)
## Croatia (Europe - indépendant en 1991)
## Haiti (North America - indépendant en 1804)
## Hungary (Europe - indépendant en 1918)
## Indonesia (Asia - indépendant en 1945)
## India (Asia - indépendant en 1947)
## British Indian Ocean Territory (Africa)
## Ireland (Europe - indépendant en 1921)
## Iran (Asia - indépendant en 1906)
## Iraq (Asia - indépendant en 1932)
## Iceland (Europe - indépendant en 1944)
## Israel (Asia - indépendant en 1948)
## Italy (Europe - indépendant en 1861)
## Jamaica (North America - indépendant en 1962)
## Jordan (Asia - indépendant en 1946)
## Japan (Asia - indépendant en -660)
## Kazakstan (Asia - indépendant en 1991)
## Kenya (Africa - indépendant en 1963)
## Kyrgyzstan (Asia - indépendant en 1991)
## Cambodia (Asia - indépendant en 1953)
## Kiribati (Oceania - indépendant en 1979)
## Saint Kitts and Nevis (North America - indépendant en 1983)
## South Korea (Asia - indépendant en 1948)
## Kuwait (Asia - indépendant en 1961)
## Laos (Asia - indépendant en 1953)
## Lebanon (Asia - indépendant en 1941)
## Liberia (Africa - indépendant en 1847)
## Libyan Arab Jamahiriya (Africa - indépendant en 1951)
## Saint Lucia (North America - indépendant en 1979)
## Liechtenstein (Europe - indépendant en 1806)
## Sri Lanka (Asia - indépendant en 1948)
## Lesotho (Africa - indépendant en 1966)
## Lithuania (Europe - indépendant en 1991)
## Luxembourg (Europe - indépendant en 1867)
## Latvia (Europe - indépendant en 1991)
## Macao (Asia)
## Morocco (Africa - indépendant en 1956)
## Monaco (Europe - indépendant en 1861)
## Moldova (Europe - indépendant en 1991)
## Madagascar (Africa - indépendant en 1960)
## Maldives (Asia - indépendant en 1965)
## Mexico (North America - indépendant en 1810)
## Marshall Islands (Oceania - indépendant en 1990)
## Macedonia (Europe - indépendant en 1991)
## Mali (Africa - indépendant en 1960)
## Malta (Europe - indépendant en 1964)
## Myanmar (Asia - indépendant en 1948)
## Mongolia (Asia - indépendant en 1921)
## Northern Mariana Islands (Oceania)
## Mozambique (Africa - indépendant en 1975)
## Mauritania (Africa - indépendant en 1960)
## Montserrat (North America)
## Martinique (North America)
## Mauritius (Africa - indépendant en 1968)
## Malawi (Africa - indépendant en 1964)
## Malaysia (Asia - indépendant en 1957)
## Mayotte (Africa)
## Namibia (Africa - indépendant en 1990)
## New Caledonia (Oceania)
## Niger (Africa - indépendant en 1960)
## Norfolk Island (Oceania)
## Nigeria (Africa - indépendant en 1960)
## Nicaragua (North America - indépendant en 1838)
## Niue (Oceania)
## Netherlands (Europe - indépendant en 1581)
## Norway (Europe - indépendant en 1905)
## Nepal (Asia - indépendant en 1769)
## Nauru (Oceania - indépendant en 1968)
## New Zealand (Oceania - indépendant en 1907)
## Oman (Asia - indépendant en 1951)
## Pakistan (Asia - indépendant en 1947)
## Panama (North America - indépendant en 1903)
## Pitcairn (Oceania)
## Peru (South America - indépendant en 1821)
## Philippines (Asia - indépendant en 1946)
## Palau (Oceania - indépendant en 1994)
## Papua New Guinea (Oceania - indépendant en 1975)
## Poland (Europe - indépendant en 1918)
## Puerto Rico (North America)
## North Korea (Asia - indépendant en 1948)
## Portugal (Europe - indépendant en 1143)
## Paraguay (South America - indépendant en 1811)
## Palestine (Asia)
## French Polynesia (Oceania)
## Qatar (Asia - indépendant en 1971)
## Réunion (Africa)
## Romania (Europe - indépendant en 1878)
## Russian Federation (Europe - indépendant en 1991)
## Rwanda (Africa - indépendant en 1962)
## Saudi Arabia (Asia - indépendant en 1932)
## Sudan (Africa - indépendant en 1956)
## Senegal (Africa - indépendant en 1960)
## Singapore (Asia - indépendant en 1965)
## South Georgia and the South Sandwich Islands (Antarctica)
## Saint Helena (Africa)
## Svalbard and Jan Mayen (Europe)
## Solomon Islands (Oceania - indépendant en 1978)
## Sierra Leone (Africa - indépendant en 1961)
## El Salvador (North America - indépendant en 1841)
## San Marino (Europe - indépendant en 885)
## Somalia (Africa - indépendant en 1960)
## Saint Pierre and Miquelon (North America)
## Sao Tome and Principe (Africa - indépendant en 1975)
## Suriname (South America - indépendant en 1975)
## Slovakia (Europe - indépendant en 1993)
## Slovenia (Europe - indépendant en 1991)
## Sweden (Europe - indépendant en 836)
## Swaziland (Africa - indépendant en 1968)
## Seychelles (Africa - indépendant en 1976)
## Syria (Asia - indépendant en 1941)
## Turks and Caicos Islands (North America)
## Chad (Africa - indépendant en 1960)
## Togo (Africa - indépendant en 1960)
## Thailand (Asia - indépendant en 1350)
## Tajikistan (Asia - indépendant en 1991)
## Tokelau (Oceania)
## Turkmenistan (Asia - indépendant en 1991)
## East Timor (Asia)
## Tonga (Oceania - indépendant en 1970)
## Trinidad and Tobago (North America - indépendant en 1962)
## Tunisia (Africa - indépendant en 1956)
## Turkey (Asia - indépendant en 1923)
## Tuvalu (Oceania - indépendant en 1978)
## Taiwan (Asia - indépendant en 1945)
## Tanzania (Africa - indépendant en 1961)
## Uganda (Africa - indépendant en 1962)
## Ukraine (Europe - indépendant en 1991)
## United States Minor Outlying Islands (Oceania)
## Uruguay (South America - indépendant en 1828)
## United States (North America - indépendant en 1776)
## Uzbekistan (Asia - indépendant en 1991)
## Holy See (Vatican City State) (Europe - indépendant en 1929)
## Saint Vincent and the Grenadines (North America - indépendant en 1979)
## Venezuela (South America - indépendant en 1811)
## Virgin Islands, British (North America)
## Virgin Islands, U.S. (North America)
## Vietnam (Asia - indépendant en 1945)
## Vanuatu (Oceania - indépendant en 1980)
## Wallis and Futuna (Oceania)
## Samoa (Oceania - indépendant en 1962)
## Yemen (Asia - indépendant en 1918)
## Yugoslavia (Europe - indépendant en 1918)
## South Africa (Africa - indépendant en 1910)
## Zambia (Africa - indépendant en 1964)
## Zimbabwe (Africa - indépendant en 1980)

4. Utiliser la fonction de calcul de ratio de la population pour savoir pour chaque pays le ratio entre la population des villes de celui-ci et la population du pays

Idéalement, créer une nouvelle liste qui ajoute cette information aux autres, pour chaque pays

Country.new = lapply(
    Country.liste,
    function(e) {
        e$Ratio = ratio(e$Population, e$City$Population)
        return(e)
    }
)

5. Identifier quels pays ont un ratio supérieur à 1 avec la nouvelle liste créée

res = Filter(
    function(e) {
        if (is.null(e$Ratio)) {
            return (FALSE)
        }
        return (e$Ratio > 1)
    },
    Country.new
)
sapply(res, function(e) return (e$Name))
## [1] "Cocos (Keeling) Islands" "Gibraltar"              
## [3] "Singapore"