2015-06-06 2 views
0

Как получить набор данных R с пробелами в его названии, например 'BJsales.lead (BJsales)' в пакетах «наборы данных»?R: Как получить набор данных с пробелами в его названии

pkg = "datasets" 
cat("Summary of all the datasets in package", pkg, "--\n" ) 
d = data(package=pkg) $results # "Package" "LibPath" "Item" "Title" 
names = d[ , "Item" ] 
titles = d[ , "Title" ] 
    # sum(duplicated(names)) ?? 

for(j in 1:len(names)){ 
    name = names[[j]] 
    cat(name, ":\n") 

    data(list=name) 
    x = get(name) # <-- Error if blank in name 

    m = paste(dim(as.matrix(x)), collapse=" ") # grr 
    cat(class(x), m, " freq", frequency(x), "\n") 
} 

# -> Error in get(name) : object 'BJsales.lead (BJsales)' not found 

OK, get могут только LookUp действительные имена, это разумно.
Но что делать - как получить данные для «BJsales.lead (BJsales)»?

R версии 3.1.3 (2015-03-09)
Платформа: x86_64-яблочно-darwin10.8.0 (64-разрядная версия)
Запуск под: OS X 10.8.3 (Mountain Lion)

+0

Что вы на самом деле пытаетесь сделать? Вы просто хотите изучить набор данных или пытаетесь сохранить его как другое имя объекта? Ничто из того, что вы здесь делаете, действительно кажется необходимым для доступа к набору данных (что может быть сделано только с помощью 'data()'). – Thomas

+0

@ Томас, я хочу «Резюме всех наборов данных в пакете X». Однако, если вы попробуете это, вы увидите, что 'data (name); get (name) 'не работает. – denis

ответ

4

на самом деле, get()может посмотреть «недействительные» имена:

`x y` <- 3; 
get('x y'); 
## [1] 3 

проблема здесь является то, что Item столбца матрицы results возвращаемого data() не всегда содержит е xact имя набора данных; в некоторых случаях он имеет суффикс в скобках, хотя я понятия не имею, почему.

Вы можете снять его с помощью gsub(), а затем загрузить через get().

Кроме того, вам не нужен звонок data(list=name).

Также нет len() (к сожалению); Думаю, вы имеете в виду length().

Следовательно:

pkg <- 'datasets'; 
cat('Summary of all the datasets in package',pkg,'--\n'); 

d <- data(package=pkg)$results; # 'Package' 'LibPath' 'Item' 'Title' 
names <- d[,'Item']; 
titles <- d[,'Title']; 

for (j in 1:length(names)) { 
    name <- names[j]; 
    cat(name,':\n'); 
    x <- get(gsub('\\s.*','',name)); 
    m <- paste(dim(as.matrix(x)),collapse=' '); 
    cat(class(x),m,' freq',frequency(x),'\n'); 
}; 
## Summary of all the datasets in package datasets -- 
## AirPassengers : 
## ts 144 1 freq 12 
## BJsales : 
## ts 150 1 freq 1 
## BJsales.lead (BJsales) : 
## ts 150 1 freq 1 
## BOD : 
## data.frame 6 2 freq 1 
## CO2 : 
## nfnGroupedData nfGroupedData groupedData data.frame 84 5 freq 1 
## ChickWeight : 
## nfnGroupedData nfGroupedData groupedData data.frame 578 4 freq 1 
## DNase : 
## nfnGroupedData nfGroupedData groupedData data.frame 176 3 freq 1 
## EuStockMarkets : 
## mts ts matrix 1860 4 freq 260 
## Formaldehyde : 
## data.frame 6 2 freq 1 
## HairEyeColor : 
## table 32 1 freq 1 
## Harman23.cor : 
## list 3 1 freq 1 
## Harman74.cor : 
## list 3 1 freq 1 
## Indometh : 
## nfnGroupedData nfGroupedData groupedData data.frame 66 3 freq 1 
## InsectSprays : 
## data.frame 72 2 freq 1 
## JohnsonJohnson : 
## ts 84 1 freq 4 
## LakeHuron : 
## ts 98 1 freq 1 
## LifeCycleSavings : 
## data.frame 50 5 freq 1 
## Loblolly : 
## nfnGroupedData nfGroupedData groupedData data.frame 84 3 freq 1 
## Nile : 
## ts 100 1 freq 1 
## Orange : 
## nfnGroupedData nfGroupedData groupedData data.frame 35 3 freq 1 
## OrchardSprays : 
## data.frame 64 4 freq 1 
## PlantGrowth : 
## data.frame 30 2 freq 1 
## Puromycin : 
## data.frame 23 3 freq 1 
## Seatbelts : 
## mts ts 192 8 freq 12 
## Theoph : 
## nfnGroupedData nfGroupedData groupedData data.frame 132 5 freq 1 
## Titanic : 
## table 32 1 freq 1 
## ToothGrowth : 
## data.frame 60 3 freq 1 
## UCBAdmissions : 
## table 24 1 freq 1 
## UKDriverDeaths : 
## ts 192 1 freq 12 
## UKgas : 
## ts 108 1 freq 4 
## USAccDeaths : 
## ts 72 1 freq 12 
## USArrests : 
## data.frame 50 4 freq 1 
## USJudgeRatings : 
## data.frame 43 12 freq 1 
## USPersonalExpenditure : 
## matrix 5 5 freq 1 
## VADeaths : 
## matrix 5 4 freq 1 
## WWWusage : 
## ts 100 1 freq 1 
## WorldPhones : 
## matrix 7 7 freq 1 
## ability.cov : 
## list 3 1 freq 1 
## airmiles : 
## ts 24 1 freq 1 
## airquality : 
## data.frame 153 6 freq 1 
## anscombe : 
## data.frame 11 8 freq 1 
## attenu : 
## data.frame 182 5 freq 1 
## attitude : 
## data.frame 30 7 freq 1 
## austres : 
## ts 89 1 freq 4 
## beaver1 (beavers) : 
## data.frame 114 4 freq 1 
## beaver2 (beavers) : 
## data.frame 100 4 freq 1 
## cars : 
## data.frame 50 2 freq 1 
## chickwts : 
## data.frame 71 2 freq 1 
## co2 : 
## ts 468 1 freq 12 
## crimtab : 
## table 42 22 freq 1 
## discoveries : 
## ts 100 1 freq 1 
## esoph : 
## data.frame 88 5 freq 1 
## euro : 
## numeric 11 1 freq 1 
## euro.cross (euro) : 
## matrix 11 11 freq 1 
## eurodist : 
## dist 21 21 freq 1 
## faithful : 
## data.frame 272 2 freq 1 
## fdeaths (UKLungDeaths) : 
## ts 72 1 freq 12 
## freeny : 
## data.frame 39 5 freq 1 
## freeny.x (freeny) : 
## matrix 39 4 freq 1 
## freeny.y (freeny) : 
## ts 39 1 freq 4 
## infert : 
## data.frame 248 8 freq 1 
## iris : 
## data.frame 150 5 freq 1 
## iris3 : 
## array 600 1 freq 1 
## islands : 
## numeric 48 1 freq 1 
## ldeaths (UKLungDeaths) : 
## ts 72 1 freq 12 
## lh : 
## ts 48 1 freq 1 
## longley : 
## data.frame 16 7 freq 1 
## lynx : 
## ts 114 1 freq 1 
## mdeaths (UKLungDeaths) : 
## ts 72 1 freq 12 
## morley : 
## data.frame 100 3 freq 1 
## mtcars : 
## data.frame 32 11 freq 1 
## nhtemp : 
## ts 60 1 freq 1 
## nottem : 
## ts 240 1 freq 12 
## npk : 
## data.frame 24 5 freq 1 
## occupationalStatus : 
## table 8 8 freq 1 
## precip : 
## numeric 70 1 freq 1 
## presidents : 
## ts 120 1 freq 4 
## pressure : 
## data.frame 19 2 freq 1 
## quakes : 
## data.frame 1000 5 freq 1 
## randu : 
## data.frame 400 3 freq 1 
## rivers : 
## numeric 141 1 freq 1 
## rock : 
## data.frame 48 4 freq 1 
## sleep : 
## data.frame 20 3 freq 1 
## stack.loss (stackloss) : 
## numeric 21 1 freq 1 
## stack.x (stackloss) : 
## matrix 21 3 freq 1 
## stackloss : 
## data.frame 21 4 freq 1 
## state.abb (state) : 
## character 50 1 freq 1 
## state.area (state) : 
## numeric 50 1 freq 1 
## state.center (state) : 
## list 2 1 freq 1 
## state.division (state) : 
## factor 50 1 freq 1 
## state.name (state) : 
## character 50 1 freq 1 
## state.region (state) : 
## factor 50 1 freq 1 
## state.x77 (state) : 
## matrix 50 8 freq 1 
## sunspot.month : 
## ts 3177 1 freq 12 
## sunspot.year : 
## ts 289 1 freq 1 
## sunspots : 
## ts 2820 1 freq 12 
## swiss : 
## data.frame 47 6 freq 1 
## treering : 
## ts 7980 1 freq 1 
## trees : 
## data.frame 31 3 freq 1 
## uspop : 
## ts 19 1 freq 0.1 
## volcano : 
## matrix 87 61 freq 1 
## warpbreaks : 
## data.frame 54 3 freq 1 
## women : 
## data.frame 15 2 freq 1 
+0

Спасибо. Не могли бы вы объяснить, почему «data (list = name)» не требуется? 'Data (package = pkg)' puts say 100 имен в некотором пространстве имен? но фактические данные, которые могут быть 100 x 1G, загружаются ... когда? Кроме того, как получилось 'duplicated (names)'? – denis

+0

Пакет 'datasets' автоматически загружается в каждый сеанс R; вы можете увидеть это в 'search()'. Наборы данных из других пакетов * не * загружаются автоматически, но для их загрузки вам необходимо загрузить сам пакет, например. 'library ('ggplot2')', чтобы получить набор данных 'mpg'. Запуск 'data (package = whatever)' фактически не загружает никаких наборов данных; он просто возвращает информацию о наборах данных. – bgoldst

+0

Не уверен, что вы спрашиваете о 'duplicated (names)'; нет дубликатов. – bgoldst