Zoeken…


Opmerkingen

Bijna alle operators in R zijn echt functies. + Is bijvoorbeeld een functie gedefinieerd als function (e1, e2) .Primitive("+") waarbij e1 de linkerkant van de operator is en e2 de rechterkant van de operator is. Dit betekent dat het mogelijk is om nogal contra-intuïtieve effecten te bereiken door de + in base te maskeren met een door de gebruiker gedefinieerde functie.

Bijvoorbeeld:

`+` <- function(e1, e2) {e1-e2}

> 3+10
[1] -7

Bereik en toevoeging

Laten we een voorbeeld nemen van het toevoegen van een waarde aan een bereik (zoals bijvoorbeeld in een lus):

3+1:5

geeft:

[1] 4 5 6 7 8

Dit komt omdat de bereikoperator : een hogere prioriteit heeft dan de toevoegingoperator + .

Wat er gebeurt tijdens de evaluatie is als volgt:

  • 3+1:5
  • 3+c(1, 2, 3, 4, 5) uitbreiding van de bereikoperator om een vector van gehele getallen te maken.
  • c(4, 5, 6, 7, 8) Toevoeging van 3 aan elk lid van de vector.

Om dit gedrag te voorkomen, moet u de R-interpreter vertellen hoe u wilt dat de bewerkingen met ( ) als volgt worden besteld:

  (3+1):5

Nu zal R berekenen wat zich tussen de haakjes bevindt voordat het bereik wordt uitgebreid en geeft:

 [1] 4 5

Optellen en aftrekken

De elementaire wiskundige bewerkingen worden voornamelijk uitgevoerd op getallen of vectoren (lijsten met getallen).

1. Gebruik enkele nummers

We kunnen eenvoudig de getallen samenvoegen met + voor optellen en - voor aftrekken :

> 3 + 4.5
# [1] 7.5
> 3 + 4.5 + 2
# [1] 9.5
> 3 + 4.5 + 2 - 3.8
# [1] 5.7
> 3 + NA
#[1] NA
> NA + NA
#[1] NA
> NA - NA
#[1] NA
> NaN - NA
#[1] NaN
> NaN + NA
#[1] NaN

We kunnen de getallen toewijzen aan variabelen (in dit geval constanten) en dezelfde bewerkingen uitvoeren:

> a <- 3; B <- 4.5; cc <- 2; Dd <- 3.8 ;na<-NA;nan<-NaN
> a + B
# [1] 7.5
> a + B + cc
# [1] 9.5
> a + B + cc - Dd
# [1] 5.7
> B-nan
#[1] NaN
> a+na-na
#[1] NA
> a + na
#[1] NA
> B-nan
#[1] NaN
> a+na-na
#[1] NA

2. Het gebruik van vectoren

In dit geval maken we vectoren van getallen en voeren we de bewerkingen uit met behulp van die vectoren, of combinaties met enkele getallen. In dit geval wordt de bewerking uitgevoerd rekening houdend met elk element van de vector:

> A <- c(3, 4.5, 2, -3.8);
> A
# [1]  3.0  4.5  2.0 -3.8
> A + 2 # Adding a number 
# [1]  5.0  6.5  4.0 -1.8
> 8 - A # number less vector
# [1]  5.0  3.5  6.0 11.8
> n <- length(A) #number of elements of vector A
> n
# [1] 4
> A[-n] + A[n] # Add the last element to the same vector without the last element
# [1] -0.8  0.7 -1.8
> A[1:2] + 3 # vector with the first two elements plus a number
# [1] 6.0 7.5
> A[1:2] - A[3:4] # vector with the first two elements less the vector with elements 3 and 4
# [1] 1.0 8.3

We kunnen ook gebruik maken van de functie sum van alle elementen van een vector toe te voegen:

> sum(A)
# [1] 5.7
> sum(-A)
# [1] -5.7
> sum(A[-n]) + A[n]
# [1] 5.7

We moeten oppassen met recycling , een van de kenmerken van R , een gedrag dat optreedt bij wiskundige bewerkingen waarbij de lengte van vectoren anders is. Kortere vectoren in de expressie worden zo vaak als nodig gerecycled (misschien fractioneel) totdat ze overeenkomen met de lengte van de langste vector. In het bijzonder wordt een constante eenvoudig herhaald . In dit geval wordt een waarschuwing getoond.

> B <- c(3, 5, -3, 2.7, 1.8)
> B
# [1]  3.0  5.0 -3.0  2.7  1.8
> A
# [1]  3.0  4.5  2.0 -3.8
> A + B # the first element of A is repeated
# [1]  6.0  9.5 -1.0 -1.1  4.8
Warning message:
In A + B : longer object length is not a multiple of shorter object length
> B - A # the first element of A is repeated
# [1]  0.0  0.5 -5.0  6.5 -1.2
Warning message:
In B - A : longer object length is not a multiple of shorter object length

In dit geval is de juiste procedure om alleen de elementen van de kortere vector te beschouwen:

> B[1:n] + A
# [1]  6.0  9.5 -1.0 -1.1
> B[1:n] - A
# [1]  0.0  0.5 -5.0  6.5

Wanneer u de sum gebruikt, worden opnieuw alle elementen in de functie toegevoegd.

> sum(A, B)
# [1] 15.2
> sum(A, -B)
# [1] -3.8
> sum(A)+sum(B)
# [1] 15.2
> sum(A)-sum(B)
# [1] -3.8


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow