Seite 1 von 1
Wirkung von Zeilenumbrüchen ... seltsame Marotte von R
Verfasst: Mi Mär 06, 2019 5:47 pm
von 8ZRbP
R hat eine seltsame Marotte: Ein "+" muss immer am Ende einer Zeile stehen. Kommt vor dem "+" ein dagegen Zeilenumbruch (d.h. steht nicht am Ende von Zeile n, sondern am Anfang von Zeile n +1), funktioniert der Code nicht.
Das ist etwas nervig, man dadurch nicht immer einzelne Codezeilen auskommentieren kann, sondern ggf. auch immer das "+" der vorigen Zeile löschen und später wieder einfügen.
Das ist schon eine ungewöhnliche Marotte, in keiner anderen mir bekannten Programmiersprache hat ein Zeilenumbruch
eine Wirkung auf die Ausführung des Codes.
Was meint Ihr, gab es einen Sachgrund, das so umzusetzen?
Re: Wirkung von Zeilenumbrüchen ... seltsame Marotte von R
Verfasst: Mi Mär 06, 2019 6:28 pm
von bigben
Wie viele Sprachen kennst Du denn? Kennst Du womöglich nur Sprachen, in denen Zeilen immer mit Semikolon beendet werden?
Im Übrigen ist Deine Analyse falsch. Das hier ist gültiges R:
auch das hier
Eine Marotte kann man das kaum nennen, Sachgrund trifft. Eine Computersprache muss erkennen können, ob eine Kommandozeile jetzt abgeschlossen ist, oder nicht. Entweder muss der Programmierer das händisch markieren (ich vermute ein Semikolon in allen Dir bekannten Programmiersprachen) oder eine schlaue Sprache erschließt sich das selbst. Das geht halt nur auf Kosten eines erschließlichen Codes.
Der Gedanke, dass man in Summationsfolgen ganze Zeilen auskommentieren möchte ist wahrscheinlich in der Geschichte der Computer erstmals mit ggplot2 aufgekommen. Wo sonst sollte man sowas machen wollen?
Re: Wirkung von Zeilenumbrüchen ... seltsame Marotte von R
Verfasst: Mi Mär 06, 2019 10:10 pm
von EDi
Der Gedanke, dass man in Summationsfolgen ganze Zeilen auskommentieren möchte ist wahrscheinlich in der Geschichte der Computer erstmals mit ggplot2 aufgekommen. Wo sonst sollte man sowas machen wollen?
ggplot hat seine eigene Methode für `+`
Code: Alles auswählen
ggplot2:::`+.gg`
function (e1, e2)
{
if (missing(e2)) {
stop("Cannot use `+.gg()` with a single argument. ",
"Did you accidentally put + on a new line?", call. = FALSE)
}
e2name <- deparse(substitute(e2))
if (is.theme(e1))
add_theme(e1, e2, e2name)
else if (is.ggplot(e1))
add_ggplot(e1, e2, e2name)
else if (is.ggproto(e1)) {
stop("Cannot add ggproto objects together.", " Did you forget to add this object to a ggplot object?",
call. = FALSE)
}
}