【问题标题】:R: How to get a dataset with blanks in its nameR:如何获取名称中包含空格的数据集
【发布时间】:2015-08-21 10:54:10
【问题描述】:

如何获得名称中包含空格的 R 数据集,例如 包“数据集”中的“BJsales.lead (BJsales)”?

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

好的,get 只能查找有效名称,这是合理的。
但是该怎么办——如何获取“BJsales.lead (BJsales)”的数据?

R 版本 3.1.3 (2015-03-09)
平台:x86_64-apple-darwin10.8.0(64位)
运行于:OS X 10.8.3 (Mountain Lion)

【问题讨论】:

  • 你到底想做什么?您只是想检查数据集还是尝试将其保存为另一个对象名称?您在这里所做的一切似乎都不需要访问数据集(只需使用 data() 即可完成)。
  • @Thomas,我想要一个“包 X 中所有数据集的摘要”。但是,如果您尝试一下,您会发现 data(name); get(name) 不起作用。

标签: r dataset names


【解决方案1】:

其实get()可以查找“无效”的名字:

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

这里的问题是data() 返回的results 矩阵的Item 列并不总是包含数据集的确切名称;在某些情况下,它有一个括号后缀,虽然我不知道为什么。

您可以使用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

【讨论】:

  • 谢谢。你能解释为什么“数据(列表=名称)”是不必要的——data(package=pkg) 在某个命名空间中放置了 100 个名称吗?但是实际的数据,可能是 100 x 1G,被加载了......什么时候?还有,duplicated(names ) 怎么来的?
  • datasets 包会在每个 R 会话中自动加载;你可以在search() 看到这个。来自其他包的数据集不会自动加载,但要加载它们,您必须加载包本身,例如library('ggplot2') 获取mpg 数据集。运行data(package=whatever) 实际上不会加载任何数据集;它只是返回有关数据集的信息。
  • 不知道你在问什么duplicated(names);没有重复。
  • 重新复制:完全运行您的脚本(在 3.1.3 上的 macosx 10.8.3 中)我得到了两次?日志在gist.github.com/denis-bz/a5a2a34575a5e16d2bbc
  • 嗯,这很奇怪。不知道罪魁祸首是什么;在我的系统上没有重复。您的 R 安装可能在磁盘上有重复的数据。也许尝试查看data() 函数的源代码,看看它是如何构建结果的。通过快速扫描,也许会看到 find.package('datasets') 返回什么,以及它是如何从那里进行的。
猜你喜欢
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多