Programowanie w R

0

Hej, jestem nowa tutaj. Zaczęłam zabawę z językiem R, mam go na studiach i chciałam trochę się w niego zagłębić. Czy moglibyście polecić mi jakieś fajne darmowe kursy, książki? Mam też takie pytanie, czy można w R napisać skrypt z ciągiem Fibonacciego?

0
  1. Najlepiej chyba będzie zapytać prowadzącego zajęcia, co on poleca.
  2. R jest Turing-zupełny, więc możesz napisać w nim co chcesz.
0

Pytanie o ciąg Fibonacciego zastanowiło mnie czy istnieje jakiś język programowania w którym nie da się go zrobić

2

Zależy co rozumiesz przez „język programowania” — bo łatwo można uznać, że jest to język, który można wykorzystać do zaprogramowania maszyny Turinga, i wtedy odpowiedź brzmi „nie”.

Ale można rozumieć to stwierdzenie szerzej, to za języki programowania uznaje się często funkcyjne tworki takie jak Charity czy LOOP, bo monotypowany (tzn. jedynym typem jest funkcja) rachunek lambda nie jest Turing-zupełny. Wtedy już nie wszystko da się w nich zaprogramować, ale dalej bardzo wiele (w szczególności, w LOOP-ie można zapisać ten ciąg Fibonacciego, o który było pytanie).

A czy istnieje coś, co ja sam nazwał bym językiem programowania, a co nie pozwala wyrazić ciągu Fibonacciego? Nie. Ale dopuszczam istnienie jakichś przedziwnych definicji, które by pozwalały by coś takiego zaistniało. Tylko już za nic nie wierzę, że miałoby to jakiekolwiek praktyczne zastosowanie…

0

JavaScript jest zupełny w sensie Turinga, ale nowego wątku w nim nie stworzysz :] Pisanie, że w dowolnym języku kompletnym w sensie Turinga można zaprogramować dowolną rzecz jest jak pisanie, że każdy może zarobić 100 milionów zielonych. Teoretycznie poprawne, w praktyce niewiele wnosi. R ma swoje słabe i silne strony i na tym pasowałoby się skupić, a nie na jego kompletności w sensie Turinga.

0

A to dlaczego? Pytanie było „czy się da”, nie „czy jest to łatwe”, „czy jest to wygodne”, „czy ma to sens”… Ludzie regularnie robią różne rzeczy w różnych dziwnych językach, niekoniecznie do tego stworzonych — i sporadycznie nawet to potrafi załapać, jak np. w przypadku node.js.

1

Chyba najlepiej użyć język zgodnie z tym do czego jest dobrze przystosowany. Z tego co kojarzę R jest językiem dedykowanym obliczeniom matematycznym (głównie statystycznym?) i wizualizacji - w tym kierunku został stworzony: arytmetyka, działania na macierzach, robienie wykresów w pakiecie, itd. Tak więc chyba najlepiej używać go właśnie w takim celu jaki wspiera najlepiej. Inaczej pewnie się okaże, że wyważasz otwarte drzwi, bo wybrałaś go do działań na tekście i robisz cuda, żeby zrobić coś co w dedykowanym temu języku zrobisz jedną linijką. I nawet jeśli początki się wydają "nie tak złe" to projekty zwykle się rozwijają, kodu przybywa, a nieprzystosowanie języka boli coraz bardziej. Dlatego też polecam ćwiczyć na obliczeniach statystycznych albo big data (to chyba też dobre zastosowanie dla wizualizacji danych). Jeśli nie robisz takich na co dzień być może jest to dobra okazja, żeby spróbować jak statystyka może ci się przydać w życiu? Jeśli nie chcesz, nie masz czasu, whatever, na twoim miejscu przeszedłbym przedmiot po linii najmniejszego oporu i poświęcił czas czemuś innemu (bo skoro zastosowanie R cię nie kręci to po co ci to?). Pierwsze co mi przychodzi do głowy, choćby zrobić sobie aplikację do robienia benchmarków, proste, szybkie, użyteczne.

0

Z książek:
Programowanie w języku R. Analiza danych, obliczenia, symulacje - Marek Gągolewski - dobra na początek.

Agregator blogów o R:
https://www.r-bloggers.com/

Skrypt tworzący ciąg Fibronacciego, zapisuje wyniki w wektorze i prezentuje każdy element po kolei.

install.packages("gmp")
library(gmp)
#biblioteka do obsługi liczb 64 bitowych, https://www.rdocumentation.org/packages/gmp/versions/0.5-13.2

fibVector = as.bigz(c())
fibSeq = 40
for (i in 0:fibSeq){
  if(i<=1){
    fibVector = as.bigz(c(fibVector, i))
  } else {
    fibVector = as.bigz(c(fibVector, as.bigz(fibVector[i-1] + fibVector[i])))
  }
  print(format(fibVector[length(fibVector)], scientific = FALSE))
}

R posiada wiele gotowych bibliotek. Wyżej wymieniona biblioteka gmp, posiada zaimplementowaną funkcję obliczając n-ty element ciągu.

library(gmp)
fibnum(40)

1 użytkowników online, w tym zalogowanych: 0, gości: 1