Jarek Statinowy

Jarek Statinowy Z zapałem do pracy

Temat: Wypełnienie wierdza jedynkami

Zadanie niby proste ale mimo wszystko mam z tym problem

Mam wektor o wartościach
vec[1,4,8]

I teraz chciałbym stworzyć inny wektor 9 elementowy by na 1, 4,8 miejscu stały 1 a na pozostałych 0

czyli mam dostać
vec2=[1,0,0,1,0,0,0,1,0]

próbowałem tak
vec2=matrix(0,1,9)
for(k in 1:(length(Dane)-1)){if(k==Zmienne[k])aaa[k]=1}


Rzecz jasne wychodzę poza wektor i program się wysypuje
a chwilowo nie mam pomysłu jak zapisać by działo :)

Pozdrawiam

Temat: Wypełnienie wierdza jedynkami

Tak będzie dobrze?

vec2[c(1, 4, 8)] <- 1
Jarek Statinowy

Jarek Statinowy Z zapałem do pracy

Temat: Wypełnienie wierdza jedynkami

Wielkie dzięki za zainteresowanie

wymyśliłem jeszcze tak

wec2=rep(0,9)
for(i in 1:length(wec1)){wec2[wec1[i]]=1}


Może ktoś będzie chciał alternatywę

Temat: Wypełnienie wierdza jedynkami

Ponieważ każdy język ma swoje "upodobania", podobnie R. W eRze staramy się unikać pętli ze względów wydajnościowych. Oczywiście w tak prostym przypadku nie ma to znaczenia, a z kolei w innych - pętla jest bardziej czytelna dla programisty - to zależy od przypadku.

Jednakże w każdej innej sytuacji staramy się używać wektoryzacji, jak to pokazał Wojciech. Upraszcza to znacznie kod, powoduje mniej błędów i jest wydajniejsze.

Czasem algorytm przygotowuje się z użyciem klasycznych pętli (bo łatwiej go ogarnąć), a potem się go wektoryzuje, ale z biegiem czasu używanie tej konstrukcji przychodzi coraz łatwiej. Jeśli zamierzasz się "związać" z R, warto się tego nauczyć, bo będziesz te konstrukcje widział wszędzie.

Podobne tematy


Następna dyskusja:

Wypełnienie wiersza




Wyślij zaproszenie do