Meine globale Umgebung enthält mehrere Datenrahmen. Ich möchte nur Funktionen ausführen, die eine bestimmte Zeichenfolge in ihrem Namen enthalten. Also, ich zum ersten Mal eine Liste dieses Datenrahmen von Interesse erstellen:in R: Funktion auf Datenrahmen ausführen, deren Namen in der Liste sind
dfs <- ls()[sapply(ls(), function(x) class(get(x))) == 'data.frame']
dfs <- as.data.frame(dfs)
dfs_lst <- agrep("stats", dfs$dfs, ignore.case=FALSE, value=TRUE,
max.distance=0.1, useBytes=FALSE)
dfs_lst korrekt gibt alle Datenrahmen in meiner globalen Umgebung mit der Zeichenfolge „Statistiken“. dfs_lst
chr [1:3] "stats1" "stats2" "stats3".
Jetzt will ich Funktionen auf diesen drei Datenrahmen auszuführen, aber ich weiß nicht, wie sie von der dfs_lst nennen. Ich möchte etwas von der Art:
for(i in 1:length(dfs_lst){
# Find dataframe name in dfs_lst, and then use the matching dataframe in
# global environment. So, something of the sort:
for(dfs_lst[i] in ls()){
result[i,] <- dfs_lst[i] %>%
summarise(. , <summarise stuff>)
}
}
Zum Beispiel für i = 1, dfs_lst [1] ist Datenrahmen „stats1“, ich möchte das Folgende auszuführen, und es in der ersten Reihe „Ergebnisse speichern „:
for(stats1 in ls()){
result[1,] <- stats1 %>% summarise(. , <summarise stuff>)
}
Sie sollten solche data.frames in einer Liste speichern. Dann hätten Sie solche Probleme nicht. Beispiele und Details finden Sie in der folgenden [post] (http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames/24376207). Es wirkt auf den ersten Blick komisch, macht aber viele Operationen viel einfacher. – lmo
Wenn Sie bereits die Namen Ihrer Zielobjekte haben, können Sie einfach so etwas wie 'lapply (mget (dfs [, 1], envir = .GlobalEnv), function (x) {...})' machen. – nrussell
In einer Prise gibt es immer 'substitute (x, list (x = dfs_lst [1])' 'oder' eval (parse (text = dfs_lst [1])) ', aber sie in eine Liste zu setzen ist eine bessere Option, bevor Sie resort zu solchen Shenanigans. [Eine Art von verwandten lesen.] (http://adv-r.had.co.nz/Computing-on-the-language.html) – alistaire