R-Klausur | For- und If-Loops

Interessantes ohne bestimmtes Thema!

Moderator: student

ak13enyj

R-Klausur | For- und If-Loops

Beitrag von ak13enyj »

Hallo liebe R-Gemeinschaft,
ich heiße Yannick und bin derzeit in Korea als Austauschstudent, wo ich einen Kurs belege, welcher sich mit dem R Programm beschäftigt.
Hierzu habe ich als Klausurvorbereitung Probleme erhalten, bei denen ich einfach nicht weiter weiß.

1. Generate 100 random numbers and classify these numbers with following rule using for and if. Vector x1 for the numbers which are greater than 1 or less than -1. Vector x2 for otherwise.

2. Print out the following diagrams.
1) Equilateral Triangle (정삼각형)
*
***
*****
*******
....

2) Inversed Equilateral Triangle (역정삼각형)
*******
*****
***
*


3) Diamond (마름모)
*
***
*****
*******

*****
***
*

3. Build funtion pyramid2(x,type) to draw the Equilateral Triangle (type == 0) , Inversed Equilateral Triangle (type == 1), diamond (type == 2). (x: size, length)

Vielen Dank für eure Hilfe!!!!!!! :mrgreen:
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: R-Klausur | For- und If-Loops

Beitrag von bigben »

viewtopic.php?f=20&t=35

Hinweis zu 1.: Einhundert Zufallszahlen erzeugt folgendes Kommando:

Code: Alles auswählen

runif(100,sample(-100:-2,1),10)
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
ak13enyj

Re: R-Klausur | For- und If-Loops

Beitrag von ak13enyj »

Tut mir Leid Leute, ich wusste nicht, dass komplette Hausaufgaben unerwünscht sind. Dann schicke ich mal meine Ansätze zu den Aufgaben:

1. Generate 100 random numbers and classify these numbers with following rule using for and if. Vector x1 for the numbers which are greater than 1 or less than -1. Vector x2 for otherwise.

for (a in rnorm(100)){
if(a>= (-1)){
if(a<= 1){
x2= c(a)
}
}
else {
x1= c(a)
}
}
Ich habe mir gedacht, dass ich während a in den 100 zufällig generierten Zahlen ist mit der if Bedingung die Klassifizierung durchführen kann. Leider habe ich hier allerdings Probleme. Kann mir vielleicht jemand auf die Sprünge helfen'
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: R-Klausur | For- und If-Loops

Beitrag von bigben »

Hi!

Klar, können wir Dir auf die Sprünge helfen.
ak13enyj hat geschrieben: Do Apr 19, 2018 1:27 pmfor (a in rnorm(100)){
if(a>= (-1)){
if(a<= 1){
x2= c(a)
}
}
else {
x1= c(a)
}
}
So ist das mit den ganzen Klammern kaum lesbar. Bitte verwende zukünftig Code-Tags, damit man auch Einrückungen sehen und geschweifte Klammern leichter verstehen kann. Zunächst kann man die geschachtelte if-Anweisung mit einem logischen ODER einfacher gestalten:

Code: Alles auswählen

> TRUE|FALSE
[1] TRUE
Der wirkliche Fehler liegt aber in Zeilen wie

Code: Alles auswählen

x1 = c(a)
Das c() hat hier keinerlei Funktion. x1 wird a zugewiesen und alles, was früher mal in x1 gesteckt hat, wird überschrieben. Schau Dir folgendes mal an:

Code: Alles auswählen

x1 <- numeric(0)  # leerer Vector für Zahlen
x2 <- numeric(0)  # leerer Vector für Zahlen
for (a in rnorm(100)){
  if(a < (-1) | a > 1) x1 <- append(x1, a)
  else x2 <- append(x2, a)
}

hist(x1)
hist(x2)
Es kann sein, dass Euer Lehrer gerne eckige Klammern nach dem if und dem else hat. Ich habe die um der Lesbarkeit willen weggelassen, aber die kannst Du auch gerne noch ergänzen. Wichtig ist, dass der Code jetzt viel übersichtlicher ist. Wenn Ihr das Kommando append() nicht gelernt habt, erreicht ein einfaches c() hier das gleiche wie ein append(). Ich habe append() verwendet, weil der Name ausspricht, was hier gemacht wird.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: R-Klausur | For- und If-Loops

Beitrag von EDi »

. Generate 100 random numbers and classify these numbers with following rule using for and if. Vector x1 for the numbers which are greater than 1 or less than -1. Vector x2 for otherwise.

Code: Alles auswählen

x  <- rnorm(100)
for(i in 1){
  if(TRUE) {
    take <- abs(x)>1
    x1 <- x[take]
    x2 <- x[!take] 
  } 
}
Ungetested 8-)
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: R-Klausur | For- und If-Loops

Beitrag von bigben »

Bemerkenswerter Einsatz von if und for :lol:
if(i) wäre noch nett gewesen.
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: R-Klausur | For- und If-Loops

Beitrag von EDi »

if(i) wäre noch nett gewesen.
---
:lol: Da hätte ich mich als Dozent drüber gefreut - ich hab aber auch nie solch stumpfsinnige Aufgaben gehabt und hab den Studis volle Freiheit gelassen.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: R-Klausur | For- und If-Loops

Beitrag von jogo »

Hallo EDi,

Deine Lösung ist große Klasse. Ich war ziemlich genervt ob der Aufgabenstellung:
Warum soll man eine Aufgabe, die typisch ist für eine Programmiersprache der dritten Generation, in einer Programmiersprache der vierten Generation lösen und dabei untaugliche Mittel einsetzen?
Deine Lösung legt genau diesen Punkt offen - das ist wirklich künstlerisch wertvoll :!:

Die noch etwas aufgemotzte Version könnte so aussehen:

Code: Alles auswählen

x <- rnorm(100)
for(i in length(iris):42){
  abs(x)>1 -> take
  if (i>100) next else {
    x1 = x[take]
    x2 <- x[!take] 
  } 
}
Gruß, Jörg
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: R-Klausur | For- und If-Loops

Beitrag von Athomas »

Warum soll man eine Aufgabe, die typisch ist für eine Programmiersprache der dritten Generation, in einer Programmiersprache der vierten Generation lösen und dabei untaugliche Mittel einsetzen?
Weil man es so dem Aufgabensteller schön bequem macht - der nimmt die alten Fortran IV-Aufgaben von 1973 und schreibt überall "R" dazu :lol: !

Ohne weitere Erläuterung von "random numbers" zu sprechen, ist ja schon frech...
Das ist eigentlich nur dadurch erklärbar, dass es in der ursprünglichen Zielsprache lediglich eine leicht zugängliche Sorte von Zufallszahlen gab, aufgrund der restlichen Aufgabenstellung möglicherweise das Äquivalent von "rnorm"...

Das würde allerdings gegen meine Fortran IV-These sprechen (schönen Gruß vom RANDU)!
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: R-Klausur | For- und If-Loops

Beitrag von bigben »

Stimmt! Ich weiß, dass ich mit Dreiecken aus Sternchen in den 80ern BASIC gelernt habe. Wahrscheinlich war das auch schon aus FORTRAN-Büchern abgeschrieben. Dann wiederum: Eine for-Schleife ist per se keine schlechte Form, einen Programmablauf zu steuern. Ich halte sie sogar für eine besonders anfängerfreundliche und besonders mächtige Variante der Programmablaufsteuerung zugleich. Ich gestehe: Ich habe vorgestern ein Problem, dass ich ganz natürlich mit replicate lösen wollte, mit replicate nicht gleich hinbekommen (bzw. hatte Schwierigkeiten, die so entstehende Datenstruktur brauchbar umzuformen). Mit einer for-Schleife lief es sofort glatt. Sicher wäre das auch eleganter machbar gewesen. Bestimmt ist es aber auch kein Zufall, dass ich es mit for leichter hinbekommen habe. Vielleicht, weil ich mit for-Schleifen damals soviele Tannenbäumchen gemalt habe?

Ich erkenne natürlich an, dass man R bevorzugt vektororientiert verwenden sollte, das heißt aber nicht, dass for-Schleifen nicht gelehrt werden sollten.

Als ich C gelernt habe, habe ich gelernt, dass es eine goto Anweisung gibt, die man nicht benutzen soll. Als ich Python gelernt habe, habe ich gelernt, dass es eine global Deklaration gibt, die man nicht benutzen soll und in R habe ich gelernt, dass es <<- gibt, und dass man es nicht benutzen soll. Sehr Ihr die for-Schleife in dieser Gruppe "schmutziger" Spracheigenschaften, deren Verwendung nur einmal in hundert Jahren gerechtfertigt ist?

JMTC,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten