[R] Pętla while

pavel232
Użytkownik
Użytkownik
Posty: 104
Rejestracja: 21 cze 2014, o 17:37
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 24 razy
Pomógł: 3 razy

[R] Pętla while

Post autor: pavel232 »

Zrobiłem pętle, która zlicza kolejne sumę liczb, gdzie pierwsza liczba to 1, a każda kolejna jest o 20% większa od poprzedniej. Pętla ma się kończyć, gdy suma ta przekroczy 200. Mam problem z tym, aby zapisać te kolejne sumy w wektorze. Poniżej napisany kod:

Kod: Zaznacz cały

x<-1
while(x<200){
  x<-1+1.2*(x)
  print(x)
}
Ostatnio zmieniony 30 sty 2019, o 20:05 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

[R] Pętla while

Post autor: leg14 »

Kod: Zaznacz cały

https://www.datamentor.io/r-programming/vector/


... ics/append
pavel232
Użytkownik
Użytkownik
Posty: 104
Rejestracja: 21 cze 2014, o 17:37
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 24 razy
Pomógł: 3 razy

Re: [R] Pętla while

Post autor: pavel232 »

Próbowałem zrobić tak, ale pokazują się same jedynki:

Kod: Zaznacz cały

y<-c(1)
x<-1
while(x<200){
  x<-1+1.2*x
  append(y,x)
  print(y)
}
Ostatnio zmieniony 30 sty 2019, o 20:50 przez pavel232, łącznie zmieniany 1 raz.
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

[R] Pętla while

Post autor: leg14 »

Dlatego, ze tutaj append jest funkcja i instrukcja \(\displaystyle{ append(y,x)}\) zwraca wektor powstaly z dolaczenia x do wektora y - oryginalny wektor nie jest modyfikowany.

analogiczny przyklad:

Kod: Zaznacz cały

dodaj <- function(x) {
    return (x+1);
}
x <- 1;
dodaj(x);
print(x);

Co sie wypisze?
pavel232
Użytkownik
Użytkownik
Posty: 104
Rejestracja: 21 cze 2014, o 17:37
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 24 razy
Pomógł: 3 razy

Re: [R] Pętla while

Post autor: pavel232 »

Nie do końca rozumiem. Bo wydawało mi się, że powinno mi chociaż zwrócić dwie jedynki, bo do wektora y z jedną jedynką dołączyłem x=1
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

Re: [R] Pętla while

Post autor: leg14 »

Po pierwsze odpowiedz sobie (i mi) na pytanie ktore zadalem.

Po drugie funkcja append dziala jakos tak:

Kod: Zaznacz cały

append <- function(vector, element) {
    new_vector <- vector + element;
    return (new_vector);



}


pavel232
Użytkownik
Użytkownik
Posty: 104
Rejestracja: 21 cze 2014, o 17:37
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 24 razy
Pomógł: 3 razy

[R] Pętla while

Post autor: pavel232 »

Sorry, nie zauważyłem, że zdązyłeś edytować post. W przypadku dodaj(x) zwraca mi dwa, bo to jest funkcja, która zwraca liczbę o jeden większą. A printem po prostu jedynkę otrzymałem
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

Re: [R] Pętla while

Post autor: leg14 »

no wiec tak samo dziala funkcja append - ona nie modyfikuje zadnego z argumentow tylko zwraca nowy wektor. Tak samo jak funkcja dodaj nie modyfikuje argumentu x tylko zwraca nowa liczbe
pavel232
Użytkownik
Użytkownik
Posty: 104
Rejestracja: 21 cze 2014, o 17:37
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 24 razy
Pomógł: 3 razy

Re: [R] Pętla while

Post autor: pavel232 »

Kod: Zaznacz cały

append <- function(y, x) {
  while(x<200){
  
  
    x<-1+1.2*x
    
  }
  new_vector <-c(y,x);
  return (new_vector);
}
Zrobiłem tak. Tylko teraz mam trochę problem z tym, aby wartości pomiędzy pierwszą a ostatnią znalazły się w nowym wektorze
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

Re: [R] Pętla while

Post autor: leg14 »

A czemu tak to zrobiles?
Nic nie zrozumiales z tego co napsialem... Moj kod z funkcja append mial Ci tylko uswiadomic jak mniej wiecej dziala standardowa R'owa funkcja append - to jej masz uzyc.
Jak Twoje rozwiazanie moze dzialac skoro nigdzie nie zapameitujesz obliczonych x'ow?
pavel232
Użytkownik
Użytkownik
Posty: 104
Rejestracja: 21 cze 2014, o 17:37
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 24 razy
Pomógł: 3 razy

Re: [R] Pętla while

Post autor: pavel232 »

Ok, to teraz próbuje bez funkcji. Zrobiłem tak. Policzyło mi tylko jeden x (2.2):

Kod: Zaznacz cały

x=1
  while(x<200){
  x=1+1.2*x
  return(x)
  y=c(x)
  z=append(1,y)
  }
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

[R] Pętla while

Post autor: leg14 »

Ok, odpowiedz sobie na pytania:
1) co robi instrukcja "return"

2) czy jakakolwiek instrukcja wystepujaca w ciele funkcji po instrukcji "return" ma szanse sie wykonac?
ODPOWIEDZ