我正在尝试从选择的包中索引所有数据集。以下代码,错误,但我不明白为什么:
pn<-c("robust","rrcov","robustbase")
for(j in 1:length(pn)){
a1<-length(data(package=pn[j])$results[,3])
for(i in 1:a1){
data(cat(as.vector(data(package=pn[j])$results[i,3]),"\n"),package=as.character(pn[j]))
print(dim(cat(as.vector(data(package=pn[j])$results[i,3]),"\n")))
}
}
修改
我想要它,主要是加载数据集,依次说,检查它的大小(例如,对木材,强碱)
data(wood,package="robustbase")
dim(wood)
>20 6
会从robustbase加载“wood”,但是对于j = 3,i = 38,上面的函数返回:
Warning message:
In data(cat(as.vector(data(package = pn[j])$results[i, 3]), "\n"), :
data set ‘cat(as.vector(data(package = pn[j])$results[i, 3]), "\n")’ not found
答案 0 :(得分:2)
使用与Mark相同的一套包
pn<-c("ggplot2","plyr","reshape")
for (package in pn) {
datasets <- data(package=package)$results[,"Item"]
for (d in datasets) {
cat(package, "\t", d, "\t")
print(dim(eval(parse(text=paste(package,"::",d,sep="")))))
}
}
我以不同的方式迭代,直接循环向量(这样可以将重新索引保存到向量中)。但是,我使用的是eval(parse(text=...))
,这通常表明这不是最佳方法(请参阅fortune(106)
):
如果答案是解析(),你通常应该重新考虑这个问题。 - 托马斯拉姆利 R-help(2005年2月)
此循环的结果是:
ggplot2 diamonds [1] 53940 10
ggplot2 economics [1] 478 6
ggplot2 midwest [1] 437 28
ggplot2 movies [1] 58788 24
ggplot2 mpg [1] 234 11
ggplot2 msleep [1] 83 11
ggplot2 presidential [1] 10 4
ggplot2 seals [1] 1155 4
plyr baseball [1] 21699 22
plyr ozone [1] 24 24 72
reshape french_fries [1] 696 9
reshape smiths [1] 2 5
reshape tips [1] 244 7
答案 1 :(得分:1)
这是我今晚能做的最好的事情。我使用了一套不同的包。
pn<-c("ggplot2","plyr","reshape")
for(j in 1:length(pn)){
a1<-length(data(package=pn[j])$results[,3])
for(i in 1:a1){
cat( data(package=pn[j])$results[i,3] , package=as.character(pn[j]), "\n" )
}
}
我得到的输出就在这里。
diamonds ggplot2
economics ggplot2
midwest ggplot2
movies ggplot2
mpg ggplot2
msleep ggplot2
presidential ggplot2
seals ggplot2
baseball plyr
ozone plyr
french_fries reshape
smiths reshape
tips reshape
修改
我认为代码中dim
返回NULL
的原因是因为数据集实际上不可用,因为尚未打开库。我相信,你的代码和我的代码只是读取一个文本文件,其中包含库中数据集的名称。
您可以使用以下方式加载多个库:
lapply(pn, require, character.only=T)
但是,我还没有想出如何在加载库之后递归访问数据集。
答案 2 :(得分:1)
使用此代码我获得了更好的结果:Mark Miller发布的代码运行良好 在我们用于说明的三个例子中,但不知何故无法列出所有数据集......
rm(list=ls())
library("session")
#AAA002<-data(package=.packages(all.available=TRUE))$results[,3]
AAA001<-unique(data(package=.packages(all.available=TRUE))$results[,1])
AAA000<-rep(NA,4)
AAA005<-AAA004<-NA
for(AAA003 in AAA001){#AAA003<-AAA001[3]
script<-paste("library(",AAA003,")",sep="")
printed(script)
AAA002<-data(package=AAA003)
data(list=AAA002$results[,3])
AAA004<-ls()[-c(1:6)]
for(AAA005 in AAA004){#j<-AAA004[11]
script<-paste("dim(",AAA005,")",sep="")
result<-strsplit(printed(script)," ")
result<-as.numeric(c(result[[1]][2],result[[1]][length(result[[1]])]))
AAA000<-rbind(AAA000,c(AAA003,AAA005,result))
}
rm(list=ls()[-c(1:6)])
}
a1<-na.omit(AAA000)
a2<-data.frame(matrix(NA,nrow(a1),ncol(a1)))
a2[,1:2]<-a1[,1:2]
a2[,3:4]<-as.numeric(a1[,3:4])