Sami 54
Postad: 17 feb 23:17

For Loop i R

Har en lista (1,4,5,3,1,4,5,6,1,4,8) och vill räkna antalet gånger som 1 är på indexet före 4. I listan blir fallet 3. Hur kan jag göra det? har gjort följande:

counting<-function(lista, n,m){
p=2
for (p in c(lista)){
a <-if(results2[p]==n & results2[p-1]==m){
sum(a)
}
p<-p+1
}
}
counting(lista,4,1)

 

koden generar inget. Någon som har förslag hur man kan göra?:D

Lindehaven 700 – Lärare
Postad: 18 feb 08:46

Provade din kod på https://rextester.com/l/r_online_compiler och fick felmeddelandet: object 'lista' not found.

Fixade lite i koden och fick sedan felmeddelandet: object 'results2' not found.

Fixade lite mer i koden och fick sedan felmeddelandet: argument is of length zero.

Har inte kodat i R så jag vet just nu inte vad som är felet. Det verkar dock lite konstigt att initiera p till 2, använda p i for-loopen och öka p i for-loopen.

Just nu ser koden ut så här:

counting<-function(lista, n,m) {
  p=2
  for (p in c(lista)){
    a <-if(lista[p]==n & lista[p-1]==m){
      sum(a)
    }
    p<-p+1
  }
}
minlista <- list(1,4,5,3,1,4,5,6,1,4,8)
counting(minlista,4,1)
Sami 54
Postad: 18 feb 08:54

tack för svar!

får dock detta felmeddelande fortfarande :(

 

Error in if (lista[p] == n & lista[p - 1] == m) { :
argument is of length zero

Lindehaven 700 – Lärare
Postad: 18 feb 09:46
Sami skrev:

tack för svar!

får dock detta felmeddelande fortfarande :(

 

Error in if (lista[p] == n & lista[p - 1] == m) { :
argument is of length zero

Jag får också det felmeddelandet men jag lämnade det kvar medvetet. Hur tänker du kring det felet?

Sami 54
Postad: 18 feb 10:16

jag löste det! Tack för hjälpen:D:D

Hondel 392
Postad: 18 feb 13:28

I din kod ser det ut som att du vill att p ska vara ett index (dvs 2, 3, 4, osv). Som det är skrivit nu är dock p ett element i listan (dvs, p kommer vara 1, 4, 5, 3, 1, 4 osv). Det du skulle göra annorlunda är att ändra for-loopen till 

for(p in 2:length(lista)){
	#gör någonting
}

Då kommer p starta på 2 och sedan fortsätta med 3, 4 osv

Svara Avbryt
Close