Ich möchte for()
Schleife verwenden, um die gleiche Operation zu automatisieren, die über viele Variablen ausgeführt wird, die sie ändern.Verwenden von für() über Variablen, die geändert werden müssen
Hier einfachste Beispiel entwerfen könnte:
varToChange = list(1:10, iris$Species[1:10], letters[1:10]) # assume that it has many more than just 3 elements
varToChange
for (i in varToChange) {
if (is.character(y)) i <- as.integer(as.ordered(i))
if (is.factor(y)) i <- as.integer(i)
}
varToChange # <-- Here I want to see my elements as integers now
Hier ist aktuelles Beispiel, das mich zu dieser Frage geführt - entnommen aus: Best way to plot automatically all data.table columns using ggplot2
In der folgenden Funktion
f <- function(dt, x,y,k) {
if (is.numeric(x)) x <- names(dt)[x]
if (is.numeric(y)) y <- names(dt)[y]
if (is.numeric(k)) k <- names(dt)[k]
ggplot(dt, aes_string(x,y, col=k)) + geom_jitter(alpha=0.1)
}
f(diamonds, 1,7,2)
statt brutal von Ich wiederhole die gleiche Zeile oft, als Programmierer würde ich lieber eine Schleife haben, um diese Zeile für mich zu wiederholen. So etwas wie diese:
for (i in c(x,y,k)) {
if (is.numeric(i)) i <- names(dt)[i]
}
In C/C++ dies hätte mit Zeigern getan. In R - ist alles möglich?
UPDATE: Sehr nette Idee, Karte unten zu verwenden. Allerdings funktioniert es nicht für dieses Beispiel
getColName <- function(dt, x) {
if (is.numeric(x)) {
x <- names(dt)[x]
}
x
}
f<- function(dt, x,y,k) {
list(x,y,k) <- Map(getColName, list(x,y,k), dt)
# if (is.numeric(x)) x <- names(dt)[x]
# if (is.numeric(y)) y <- names(dt)[y]
# if (is.numeric(k)) k <- names(dt)[k]
ggplot(dt, aes_string(x,y, col=k)) + geom_jitter(alpha=0.1)
}
f(diamonds, 1,7,2) # Brrr..