r - 使用 ggsave/sprintf 出现奇怪的错误消息

标签 r ggplot2 save printf bounds

我正在计算许多回归的残差,然后用 ggplot 绘制这些残差。

我从数据文件中获取了 6 个感兴趣的变量,并创建了子字段数据文件(6 列,116 行)。

线性回归模型:

buildres <- sapply(seq_along(subfieldsdata), function(i) lm(subfieldsdata[,i] ~ myData$NP_Age+myData$sex+myData$YrsOfEd), simplify=FALSE, USE.NAMES=TRUE)

残差的计算:

getres <- vapply(buildres, stdres, numeric(116))

添加列名称:

colnames(getres) <- c("Subiculum residuals", "Presubiculum residuals", "CA1 residuals", "CA3 residuals", "CA4 residuals", "Dentate gyrus residuals")

然后我有一个 ggplot 的 for 循环:

for (i in 1:ncol (getres)) {
gp <- ggplot(data=subfieldsdata,aes(x=ECtau.res,y=getres[,i])) + geom_point(colour="Blue", shape=17, size=5)
gp <- gp +
stat_smooth(method="lm", colour="Blue", size=2, fill="Blue") +
scale_y_continuous(breaks=seq(-4, max(getres[,i])*1.1, 0.5)) +
theme_grey(base_size=35) +
labs(x="EC tau residuals", y=colnames(getres)[i]))
 print (gp)
ggsave(sprintf("ECtau%s.png", colnames((getres)[i]),gp))
}

我收到此错误消息:

Saving 7 x 7 in image
Error in strsplit(filename, "\\.")[[1]] : subscript out of bounds

我不能是尺寸:

dim(getres)
[1] 116   6

我还检查了colnames:

> colnames(getres)
[1] "Subiculum residuals"     "Presubiculum residuals"  "CA1 residuals"           "CA3 residuals"          
[5] "CA4 residuals"           "Dentate gyrus residuals"

你知道可能出现什么问题吗?

谢谢!

最佳答案

欢迎来到 Stack Overflow 海蒂:)

这个(你的图有一些假数据和文件名的临时变量)对我来说效果很好:

# Weird Error Message

ncol <- 6
nrow <- 116
subfieldsdata <- data.frame(matrix(rnorm(ncol*nrow),nrow,ncol))
colnames(subfieldsdata)[1] <- "ECtau.res"

getres <- data.frame(matrix(rnorm(ncol*nrow),nrow,ncol))
colnames(getres) <- c("Subiculum residuals", "Presubiculum residuals",
                      "CA1 residuals", "CA3 residuals", 
                      "CA4 residuals", "Dentate gyrus residuals")

for (i in 1:ncol (getres)) {
  gp <- ggplot(data=subfieldsdata,aes(x=ECtau.res,y=getres[,i])) + 
        geom_point(colour="Blue", shape=17, size=5)
  gp <- gp +
    stat_smooth(method="lm", colour="Blue", size=2, fill="Blue") +
    scale_y_continuous(breaks=seq(-4, max(getres[,i])*1.1, 0.5)) +
    theme_grey(base_size=35) +
    labs(x="EC tau residuals", y=colnames(getres)[i])
  print (gp)
  fname <- sprintf("ECtau%s.png", colnames((getres)[i]))
  print(sprintf("Saving %s ",fname))
  ggsave(fname,gp)
}

输出:

[1] "Saving ECtauSubiculum residuals.png "
Saving 7.62 x 7.11 in image
[1] "Saving ECtauPresubiculum residuals.png "
Saving 7.62 x 7.11 in image
[1] "Saving ECtauCA1 residuals.png "
Saving 7.62 x 7.11 in image
[1] "Saving ECtauCA3 residuals.png "
Saving 7.62 x 7.11 in image
[1] "Saving ECtauCA4 residuals.png "
Saving 7.62 x 7.11 in image
[1] "Saving ECtauDentate gyrus residuals.png "
Saving 7.62 x 7.11 in image
>

最后一个情节:

enter image description here

它们是您的代码中的一个拼写错误(实验室参数中的括号过多),所以我认为这可能不是您的问题代码的精确重复。显然问题出在您的文件名中,该文件名出了问题,这就是我将其打印出来的原因。

我建议打印出文件名并查看出了什么问题。

现在我想到了,另一个猜测是您的 subfieldsdata 数据帧的列名称中有一些句点(即“.”字符),这些句点混淆了 ggsave 例程。这可能是问题所在 - 尝试使用破折号或其他东西代替。

也将此作为如何创建正确可重现问题的教训。 :)

关于r - 使用 ggsave/sprintf 出现奇怪的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34386592/

相关文章:

子集后小标题中的行号 - R编程

r - ggplot 两个阴影区域 geom_area

r - ggplot2:添加描述散点图两个维度的条件密度曲线

javascript - 如何保存 HTML 中的更改?

python - 在Python中将变量保存为不带括号的列

r - ggplot2 coord_polar 在使用填充时保留顺序

r - 从R中的URL读取.txt文件时出错

r - 在不循环的情况下找到 GCD - R

c++ - R - ggplot2 使用什么作为其绘图后端?

wpf - 在 WPF 应用程序中本地保存数据的最佳方式是什么?