Использование formatC для добавления 0 к последовательности в аргументе, возвращающем ошибку в R

#r #csv #formatting

#r #csv #форматирование

Вопрос:

Во-первых, здесь действительно новичок в R.

У меня есть функция, предназначенная для оценки значений в столбцах, распределенных по многим таблицам. У меня есть аргумент в функции, который позволяет пользователю вводить, из какой последовательности таблиц они хотят извлекать данные. Функция, похоже, работает нормально, но когда пользователь вводит одно число (более 9) вместо последовательности с помощью оператора :, я нахожу сообщение об ошибке:

входные данные для этого примера — 30

Ошибка в файле (file, «rt»): не удается открыть соединение

5 файл (file, «rt»)

4 прочитайте.table(file = file, header = header, sep = sep, quote = quote, dec = dec, fill = fill, comment.char = comment.char, …)

3 FUN(«specdata/3e 01.csv»[[1L]], …)

2 lapply(пути к файлам, read.csv)

1 значение загрязнителя («specdata», «нитрат», 30)

Кроме того: предупреждающее сообщение:

В файле (file, «rt»): не удается открыть файл ‘specdata/3e 01.csv’: нет такого файла или каталога

Ниже приведен мой код:

 pollutantmean <- function(directory, pollutant, id = 1:332){
filenames <- paste0(formatC(id, digits = 0, width = 3, flag = "0"), ".csv")
filepaths <- file.path(directory, filenames)
list_of_data_frames <- lapply(filepaths, read.csv)
big.df<-do.call(rbind,list_of_data_frames)
print(str(big.df))
mean(big.df[,pollutant], na.rm=TRUE)
}
  

Многие из вас, вероятно, признают это заданием coursera. Это вышло за рамки установленного срока, и я отправил для этого некоторый (довольно нехороший) код. Я просто хочу хорошо понимать, что здесь происходит, поскольку этот тип работы напрямую связан с моим исследованием.

Комментарии:

1. Я думаю, что это преобразует входные данные в научную нотацию, когда входные данные не являются последовательностью. Это будет головной болью, поскольку входные данные используются для индексации таблиц.

Ответ №1:

Вы хотите убедиться, что вы также форматируете свои значения как целые числа

 formatC(id,digits=0, width=3, flag="0", format="d")
  

или вы могли бы использовать

 sprintf("d", id)
  

внутри вашего оператора вставки. Оба из них должны препятствовать научной нотации.

Комментарии:

1. в дополнение к вышесказанному options(scipen=999) для подавления научной нотации

2. format=»d» работает. Я сохраню параметры (scipen = 999) в своем наборе инструментов на будущее. $$$$