Ich möchte die Datensätze aller verfügbaren (= installierten) Pakete durchlaufen und herausfinden, ob diese Datensätze 6 oder mehr Spalten haben. Hier ist mein Versuch:Wie kann man alle Datensätze durchlaufen (und ihre Anzahl an Spalten bestimmen)?
dat.list <- data(package=.packages(all.available=TRUE))$results # list of all installed packages
colnames(dat.list) # "Package" "LibPath" "Item" (= name of data set) "Title" (= description)
idx <- c()
i <- 3
## for(i in nrow(dat.list)) {
nme <- dat.list[[i,"Item"]] # data set as string
data(list=nme, package=dat.list[[i,"Package"]]) # load the data
## => fails with warning: In data(list = nme, package = dat.list[[i, "Package"]]) :
## data set 'BJsales.lead (BJsales)' not found
dat <- eval(as.name(nme)) # assign the data to the variable dat
ncl <- ncol(dat)
if(!is.null(ncl) && ncl >= 6) idx <- c(idx, i)
## }
Es offensichtlich nicht funktioniert, so dass ich fixierte einen Index (hier: 3), um zu sehen, was fehlschlägt. Wie kann ich (wenn nicht über nme
oben) den Namen des Datensatzes ermitteln, um den Datensatz in einer Variablen zu speichern und dann auf die Anzahl der Spalten zugreifen?
UPDATE die Beiträge von jeremycg und nico Kombination kam ich mit diesem nach oben (wieder: nicht perfekt in die Namen der Datensätze herauszufinden, aber es läuft durch):
dat.list <- data(package=.packages(all.available=TRUE))$results # list of all installed packages
idx <- c()
for (i in 1:nrow(dat.list))
{
require(dat.list[i, "Package"], character.only=TRUE)
raw.name <- dat.list[i, "Item"] # data set (and parenthetical suffix) as raw string
name <- gsub('\\s.*','', raw.name) # name of data set
dat <- tryCatch(get(name), error=function(e) e) # assign the data to the variable dat (if not erroneous)
if(is(dat, "simpleError")) {
warning("Element ",i," threw an error")
dat <- NA
}
ncl <- ncol(dat)
if(!is.null(ncl) && ncl >= 6)
idx <- c(idx, i)
}
dat.list[idx, c("Package", "Item")]
Es gibt eine [ähnliche Frage hier] (http://stackoverflow.com/questions/30684322/r-how-to- Get-a-Dataset-mit-Leerzeichen-in-seinem-Namen), das Problem ist, dass einige Datasets ein Suffix in Klammern haben, anstatt Ihren Code. Siehe den Link für eine Lösung – jeremycg