Programmering

Implementer en ikke-rekursiv produktfunktion i R

06. september kl. 19:57 af louisesørensen2

Hej SP,

Jeg har en opgave som siger 

"Implement a product function in R without using recursion"

Jeg tror, at jeg skal programmer prod() funktionen i R. Jeg har en kode som hedder:

prod.uden<-function(a,b){
  c<-a*b
    return(c)
}

Men problemet med denne er at jeg hele tiden manuelt skal indsætte flere inputvariable hvis man f.eks. nu ønskede at beregne prod.uden(2,3,5,6)

Hvordan løser jeg dette? nogen hints?


Brugbart svar (0)

Svar #1
06. september kl. 20:34 af SådanDa

Du kan overveje at bruge en for-lykke?


Svar #2
06. september kl. 21:19 af louisesørensen2

Uhmm... altså for-loop til inputvariable?


Brugbart svar (0)

Svar #3
06. september kl. 21:29 af SådanDa

Tja, det er bare et forslag. Hvis ens input er en vektor er det nemmere, men man kan sætte dem ind i en vektor i funtionen. Noget i stil med

prod.uden(a,b,...){

vec <- c(a,b,...)

}

så kan man lave et loop over den vektor.


Svar #4
06. september kl. 21:38 af louisesørensen2

Det er et meget godt forslag. Tak! Men, jeg har bare lidt svært ved at se hvordan jeg skal få det loop til at virke hmm..

jeg har 

prod.uden<-function(a,b,...){

vec<-c(a,b,...)

return(vec)

}

Men jeg er vel interesseret i at indgangene i vektoren a, b osv ganges sammen når jeg ønsker et output vec. 

Er det ikke korrekt?

Hvis ja, hvordan kommer den operationskode ind i billedet?


Brugbart svar (0)

Svar #5
06. september kl. 21:43 af SådanDa

Jo, du mangler selve loopet.

prøv f.eks.

prod.uden <- function(a,b,...){

   vec<-c(a,b,...)

   res <-1

   for(i in vec){

      res <- res*i

   }

return(res)

}


Svar #6
06. september kl. 21:48 af louisesørensen2

Hvor fedt! Det virker! 

Må jeg spørge, hvad 

res <- 1 og res <- res * i 

skal gøre godt for?

Eller hvordan jeg skal forstå den?


Brugbart svar (0)

Svar #7
06. september kl. 21:56 af SådanDa

Ja, jeg har bare kaldt den res for resultat, pointen er at det er den variabel vi vil have resultatet i. Vi starter med at give den værdien 1, da det er det neutrale element for multiplikation. (altså a*1=a).

Så laver vi et for-loop, for(i in vec) som går i gennem alle elementer i vec, for hvert nyt element i "opdaterer" vi res til at være res*i.

Altså vi ganger elementet på vores foreløbige resultat.

Et eksempel:

vec = (2,3,4)

først sættes res=1.

for det første element i vec (2) opdateres res=1*2=2.

så for det andet element opdateres res igen til res=2*3=6

og sidst, for tredje element opdateres res til res=6*4=24, som så returneres. Jeg håber det giver mening.


Svar #8
07. september kl. 10:45 af louisesørensen2

Tusind tusind tak for hjælpen, SådanDa. Og mange tak for forklaringen, nu forstår jeg også tællefunktionen hehe.


Skriv et svar til: Implementer en ikke-rekursiv produktfunktion i R

Du skal være logget ind, for at skrive et svar til dette spørgsmål. Klik her for at logge ind.
Har du ikke en bruger på Studieportalen.dk? Klik her for at oprette en bruger.