我正在研究具有313个变量的数据集中的变量。 我当前正在打印的full list of variables到输出屏幕使用:
str(df, list.len=ncol(df))
str()
输出是非常有用的,但难以在输出读取时,有这么多的变量窗口。
是否有命令,类似于str()
,但是,可以使输出发送到浏览窗口(View()
)?
这将非常有用:
library(dplyr)
d %>% str() %>% View()
Outputing一个数据集:varnames,VARTYPE,values_string
这存在吗?
答案 0 :(得分:1)
根据您的描述,它看起来像这里的实现:https://www.r-bloggers.com/str-implementation-for-data-frames/可以工作。它将str()的结果输出到data.frame,然后可以在View()中使用它。
#' Creates a \code{data.frame} version of the str function for data.frames.
#'
#' Note that this function only works with \code{data.frames}. The function
#' will throw an error for any other object types.
#'
#' @param n the first n element to show
#' @param width maximum width in characters for the examples to show
#' @param n.levels the first n levels of a factor to show.
#' @param width.levels maximum width in characters for the number of levels to show.
#' @param factor.values function defining how factor examples should be printed.
#' Possible values are \code{as.character} or \code{as.integer}.
#' @export
#' @examples
#' data(iris)
#' str(iris)
#' strtable(iris)
#' strtable(iris, factor.values=as.integer)
strtable <- function(df, n=4, width=60,
n.levels=n, width.levels=width,
factor.values=as.character) {
stopifnot(is.data.frame(df))
tab <- data.frame(variable=names(df),
class=rep(as.character(NA), ncol(df)),
levels=rep(as.character(NA), ncol(df)),
examples=rep(as.character(NA), ncol(df)),
stringsAsFactors=FALSE)
collapse.values <- function(col, n, width) {
result <- NA
for(j in 1:min(n, length(col))) {
el <- ifelse(is.numeric(col),
paste0(col[1:j], collapse=', '),
paste0('"', col[1:j], '"', collapse=', '))
if(nchar(el) <= width) {
result <- el
} else {
break
}
}
if(length(col) > n) {
return(paste0(result, ', ...'))
} else {
return(result)
}
}
for(i in seq_along(df)) {
if(is.factor(df[,i])) {
tab[i,]$class <- paste0('Factor w/ ', nlevels(df[,i]), ' levels')
tab[i,]$levels <- collapse.values(levels(df[,i]), n=n.levels, width=width.levels)
tab[i,]$examples <- collapse.values(factor.values(df[,i]), n=n, width=width)
} else {
tab[i,]$class <- class(df[,i])[1]
tab[i,]$examples <- collapse.values(df[,i], n=n, width=width)
}
}
class(tab) <- c('strtable', 'data.frame')
return(tab)
}
#' Prints the results of \code{\link{strtable}}.
#' @param x result of code \code{\link{strtable}}.
#' @param ... other parameters passed to \code{\link{print.data.frame}}.
#' @export
print.strtable <- function(x, ...) {
NextMethod(x, row.names=FALSE, ...)
}
答案 1 :(得分:0)
您可以使用capture.output
来获取想要的东西。但是,它不与magrittr
烟斗发挥出色。以下作品:
library("magrittr") # The package and some toy data
obj <- list(a = list(b = list()), c = list(), d = numeric(10))
capture.output(obj %>% str) %>% View
或者:
obj %>% capture.output(str(.)) %>% View
以下“幼稚”链接无效有效:
obj %>% str %>% capture.output %>% View
答案 2 :(得分:0)
也许您想要类似的东西
View(capture.output(str(x <- 1:5)))
答案 3 :(得分:0)
这是一个应该可以工作的简单函数:
str_tbl <- function(x, n=5) {
data.frame(Variable = names(x),
Classe = sapply(x, typeof),
Values = sapply(x, function(x) paste0(head(x, n = n),
collapse = ", ")),
row.names = NULL)
}
然后只需执行 View(str_tbl(df))
,其中 df
是您感兴趣的数据框。