在Stata中,summarize
打印当前工作空间中所有变量的简要统计摘要。在R中,summary(<myvariable>)
对特定<myvariable>
执行类似操作。
问:在R中,我应该如何在工作区中打印所有相关变量的统计摘要?
我试过了:
x <- runif(4)
y <- runif(4)
z <- runif(3)
w <- matrix(runif(4), nrow = 2)
sapply(ls(), function(i) {if (class(get(i)) == "numeric") summary(get(i))})
接近我想要的。但它仍然打印
$w
NULL
...
这是不受欢迎的。此外,当我的工作区中存在类型为闭包的变量时,此代码会抛出错误...
我觉得我要去这里的杂草了。必须有一种更简单,直接的方法来或多或少地复制R中的Stata summarize
,对吗?
答案 0 :(得分:1)
您可以使用methods
确定哪些变量类型适用于summary
summary.methods = methods(summary)
check.method <- function(x){
any(grepl(paste0('^summary\\.',class(x)[1],'$'),summary.methods))
}
lapply(ls(), function(z,envir = .GlobalEnv) {
obj = get(z)
if (class(obj) %in% c('list','data.frame')
Recall(names(obj),as.environment(obj))
else if (check.method(obj))
print(summary(obj))
else
print(paste0("No summary for: ",z))
})
您可能希望根据您拥有的数据进行更改,但它应该可以正常工作。
为列表/数据框添加了一些递归。
如果你想让它与列表和单个数据框列一起使用,我会检查这些类并使用as.environment
从列表/框架中获取变量。如果你愿意的话,我可以告诉你一个更明确的方法。