Dieser Beitrag (Lazy evaluation in R – is assign affected?) deckt einige Gemeinsamkeiten ab, aber ich bin mir nicht sicher, dass er meine Frage beantwortet.Warum wird die Verwendung schlecht zugewiesen?
Ich hörte assign
mit, wenn ich die apply
Familie eine ganze Weile zurück entdeckt, wenn auch rein aus Gründen der Eleganz in Situationen wie diese:
names.foo <- letters
values.foo <- LETTERS
for (i in 1:length(names.foo))
assign(names.foo[i], paste("This is: ", values.foo[i]))
, die ersetzt werden können:
foo <- lapply(X=values.foo, FUN=function (k) paste("This is :", k))
names(foo) <- names.foo
Dies ist auch der Grund, warum dies (http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I-turn-a-string-into-a-variable_003f) R-FAQ besagt, dass dies vermieden werden sollte.
Nun, ich weiß, dass assign
allgemein verpönt. Aber gibt es andere Gründe, die ich nicht kenne? Ich vermute, dass es sich mit dem Scoping oder der faulen Bewertung herumschlagen könnte, aber ich bin mir nicht sicher? Beispielcode, der solche Probleme zeigt, wird groß sein.
In meinem Verständnis ist setNames nur ein versteckter 'Name <-'. Das ist ein anderes Haustier von mir! Gibt es einen besonderen Vorteil gegenüber "Namen"? – asb
Warum sollte es ein "pet peeve" sein? Es ist leicht zu lesen und einige Leute bevorzugen den kompakteren Code. Mein Lieblingsärgernis benutzt Schleifen, wenn sie nicht gebraucht werden. –
@asb wie wäre es 'sapply (X = values.foo, FUN = function (k) einfügen (" Das ist: ", k), vereinfachen = FALSE)' zu vermeiden, Ihre 'Namen <-' anrufen ... oder zu versteck es anders, schätze ich. – GSee