странное сообщение об ошибке при использовании ggsave / sprintf

Я вычисляю остатки из многих регрессий, чтобы затем построить эти остатки с помощью 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")

Затем у меня есть цикл for для ggplot:

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(getres)
[1] "Subiculum residuals"     "Presubiculum residuals"  "CA1 residuals"           "CA3 residuals"          
[5] "CA4 residuals"           "Dentate gyrus residuals"

Вы знаете, в чем может быть проблема?

Спасибо!


person Heidi Jacobs    schedule 20.12.2015    source источник
comment
Трудно догадаться, в чем может быть ошибка без воспроизводимого примера, но я предполагаю, что проблема в выводе sprintf. Чтобы посмотреть, что происходит, вы пытались создать желаемое имя файла вне ggsave?   -  person Konrad    schedule 21.12.2015
comment
Что-то не так с моим ответом Хайди?   -  person Mike Wise    schedule 21.12.2015


Ответы (1)


Добро пожаловать в 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
>

Последний сюжет:

введите здесь описание изображения

И это была опечатка в вашем коде (слишком много скобок в аргументе лаборатории), поэтому я думаю, что это, возможно, не точная копия кода вашей проблемы. Очевидно, проблема в вашем имени файла, что-то не так с этим именем файла, поэтому я распечатал его.

Я бы посоветовал распечатать имя файла и посмотреть, что пошло не так.

Теперь, когда я думаю об этом, еще одно предположение состоит в том, что у вас есть точки (то есть символы ".") В именах столбцов вашего subfieldsdata фрейма данных, которые сбивают с толку процедуру ggsave. Вероятно, это проблема - попробуйте вместо этого использовать тире или что-то в этом роде.

Также примите это как урок того, как создать правильно воспроизводимый вопрос. :)

person Mike Wise    schedule 21.12.2015