Ite*_*tor 7 plot r bigdata ggplot2
而不是询问如何绘制大数据集,我想要包装,plot以便生成大量图表的代码在绘制大型对象时不会受到重创.如何plot以非常简单的方式进行换行以保留其所有功能,但首先要测试以确定传递的对象是否太大?
这段代码适用于非常普通的调用plot,但它缺少相同的通用性plot(见下文).
myPlot <- function(x, ...){
isBad <- any( (length(x) > 10^6) || (object.size(x) > 8*10^6) || (nrow(x) > 10^6) )
if(is.na(isBad)){isBad = FALSE}
if(isBad){
stop("No plots for you!")
}
return(plot(x, ...))
}
x = rnorm(1000)
x = rnorm(10^6 + 1)
myPlot(x)
Run Code Online (Sandbox Code Playgroud)
失败的示例:
x = rnorm(1000)
y = rnorm(1000)
plot(y ~ x)
myPlot(y ~ x)
Run Code Online (Sandbox Code Playgroud)
是否有一些简单的方法来包装plot以启用对要绘制的数据的检查,同时仍然通过所有参数?如果没有,那怎么样ggplot2?我是一个平等的机会非绘图员.(在数据集很大的情况下,我将使用hexbin,子采样,密度图等,但这不是重点.)
注1:在测试想法时,我建议测试大小> 100(或设置一个变量,例如myThreshold <- 1000),而不是大于> 1M的大小 - 否则在慢速绘图中会有很多痛苦.:)
您遇到的问题是,当前编码时,myplot()假定x是一个数据对象,但是您尝试将其传递给公式.R plot()通过方法实现了这一点 - 当x一个公式时,plot.formula()方法被调度到而不是基本plot.default()方法.
你需要做同样的事情:
myplot <- function(x, ...)
UseMethod("myplot")
myplot.default <- function(x, ....) {
isBad <- any((length(x) > 10^6) || (object.size(x) > 8*10^6) ||
(nrow(x) > 10^6))
if(is.na(isBad)){isBad = FALSE}
if(isBad){
stop("No plots for you!")
}
invisible(plot(x, ...))
}
myplot.formula <- function(x, ...) {
## code here to process the formula into a data object for plotting
....
myplot.default(processed_x, ...)
}
Run Code Online (Sandbox Code Playgroud)
您可以窃取代码,plot.formula()以便在处理x对象所需的代码中使用.或者,您可以按照标准的非标准评估规则(PDF)自行推出.
| 归档时间: |
|
| 查看次数: |
901 次 |
| 最近记录: |