【发布时间】:2020-02-04 15:11:36
【问题描述】:
我编写了以下代码以在 Shiny R 应用程序中生成 10x10 绘图。我执行了一些额外的计算(例如 R 平方的估计),这使得该过程甚至更重/更慢,但我相信有一种完全不同且更有效的方法来创建以下绘图,而不是使用嵌套的 for 循环进行迭代.
output$plot2 <- renderPlot({
par(mfrow=c(10,10))
par(mar=c(0,0,0,0)+0.1)
for (i in 0:9){
for (j in 0:9){
plot(df()[,c(paste0("intensity_",i), paste0("intensity_",j))], xlab=NULL, ylab=NULL, main=NULL, yaxt='n',xaxt='n', ann=FALSE)
abline(fit <- lm(df()[,c(paste0("intensity_",i), paste0("intensity_",j))], data=df()), col='red')
legend("topleft", bty="n", legend=format(summary(fit)$adj.r.squared, digits=3))
}
}
})
您能否建议是否有更好的替代方法可以在更短的时间内以更 R 友好的方式产生相同的输出?
*df() 有 10 列和数千条数字记录
【问题讨论】:
-
您可以将 ggplot2 与 faceting 一起使用,但您的主要问题可能是您正在绘制的点数。您可以尝试删除由于过度绘图而看不见的点:stackoverflow.com/questions/16665420/…
-
拥有一组数据来运行你的函数并进行几次测试会很有帮助。我怀疑可以通过使用
lapply家族来做一些事情。被矢量化后它应该运行得更快。 -
@AndreaDodet
lapply没有矢量化,当然也不会更快,如果您不需要返回值而只需要副作用(如绘图),可能会更慢。但我希望大部分时间都花在plot函数上。