本文介绍了R中的简化dput()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想念一种以透明方式将数据添加到SO答案的方法.我的经验是,来自使用tribble几乎可以处理任何数据类型(尽管因素需要临时修复).
tribble solution
The read.table option is very readable but not very general. with tribble pretty much any data type can be handled (though factors need adhoc fixing).
此解决方案对OP的示例不是很有用,但对列表列很有用(请参见下面的示例).要使用输出,必须使用库tibble.
This solution isn't so useful for OP's example but is great for list columns (see example below). To make use of the output, library tibble is required.
作为我的第一个解决方案,它是围绕dput的包装,但是不是'dputting'列,而是'dputting'元素.
Just as my first solution, it's a wrapper around dput, but instead of 'dputting' columns, i'm 'dputting' elements.
dput_small3 <- function(df, name=as.character(substitute(df)), n= nrow(df), random=FALSE, seed = 1){ name if(random) { set.seed(seed) df <- df[sample(1:nrow(df),n),] } else { df <- head(df,n) } df1 <- lapply(df,function(col) if(is.factor(col)) as.character(col) else col) dputs <- sapply(df1,function(col){ col_dputs <- sapply(col,function(elt) paste(capture.output(dput(elt)),collapse="")) max_char <- max(nchar(unlist(col_dputs))) sapply(col_dputs,function(elt) paste(c(rep(" ",max_char-nchar(elt)),elt),collapse="")) }) lines <- paste(apply(dputs,1,paste,collapse=", "),collapse=",\n ") output <- paste0(name," <- tibble::tribble(\n ", paste0("~",names(df),collapse=", "), ",\n ",lines,"\n)") cat(output) sapply(names(df), function(x) if(is.factor(df[[x]])) cat(sep='','\n',name,'$',x,' <- factor(', name,'$',x,')')) invisible(NULL) } dput_small3(dplyr::starwars[c(1:3,11)],"sw",n=6,random=TRUE) # sw <- tibble::tribble( # ~name, ~height, ~mass, ~films, # "Lando Calrissian", 177L, 79, c("Return of the Jedi", "The Empire Strikes Back"), # "Finis Valorum", 170L, NA_real_, "The Phantom Menace", # "Ki-Adi-Mundi", 198L, 82, c("Attack of the Clones", "The Phantom Menace", "Revenge of the Sith"), # "Grievous", 216L, 159, "Revenge of the Sith", # "Wedge Antilles", 170L, 77, c("Return of the Jedi", "The Empire Strikes Back", "A New Hope"), # "Wat Tambor", 193L, 48, "Attack of the Clones" # )
这篇关于R中的简化dput()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!