Я хочу прочитать R-файл или скрипт, изменить имя файла внешних данных, который будет прочитан, и экспортировать измененный R-код в новый R-файл или скрипт. Помимо имени считываемого файла данных (и имени нового R-файла), я хочу, чтобы два R-скрипта были идентичными., используя cat в R, чтобы создать отформатированный R-скрипт
Я могу приблизиться, за исключением того, что не могу понять, как сохранить пустые строки, которые я использую для удобства чтения и уменьшения ошибок.
Оригинальный R-файл, который считывается. Обратите внимание, что некоторые из кода в этом файле нечувствительны, но для меня это не имеет значения. Этот код не нужно запускать.
# apple.pie.all.purpose.flour.arsc.Jun23.2013.r
library(my.library)
aa <- 10 # aa
bb <- c(1:7) # bb
my.data = convert.txt("../applepieallpurposeflour.txt",
group.df = data.frame(recipe =
c("recipe1", "recipe2", "recipe3", "recipe4", "recipe5")),
covariates = c(paste("temp", seq_along(1:aa), sep="")))
ingredient <- c('all purpose flour')
function(make.pie){ make a pie }
Код R, который я использую, чтобы прочитать вышеуказанный файл, изменить его и экспортировать результат. Этот R-код запускается и является единственным кодом, который должен выполняться для достижения желаемого результата (за исключением того, что я не могу получить формат нового R-скрипта в точности так, как в исходном R-скрипте, т. Е. Пустые строки, присутствующие в исходном R сценарий нет в новом R сценария):
setwd('c:/users/mmiller21/simple r programs/')
# define new fruit
new.fruit <- 'peach'
# read flour file for original fruit
flour <- readLines('apple.pie.all.purpose.flour.arsc.Jun23.2013.r')
# create new file name
output.flour <- paste(new.fruit, ".pie.all.purpose.flour.arsc.Jun23.2013.r", sep="")
# add new file name
flour.a <- gsub("# apple.pie.all.purpose.flour.arsc.Jun23.2013.r",
paste("# ", output.flour, sep=""), flour)
# add line to read new data file
cat(file = output.flour,
gsub("my.data = convert.txt\\(\"../applepieallpurposeflour.txt",
paste("my.data = convert.txt\\(\"../", new.fruit, "pieallpurposeflour.txt",
sep=""), flour.a),
sep=c("","\n"), fill = TRUE
)
Вот полученный новый R сценарий:
# peach.pie.all.purpose.flour.arsc.Jun23.2013.r
library(my.library)
aa <- 10 # aa
bb <- c(1:7) # bb
my.data = convert.txt("../peachpieallpurposeflour.txt",
group.df = data.frame(recipe =
c("recipe1", "recipe2", "recipe3", "recipe4", "recipe5")),
covariates = c(paste("temp", seq_along(1:aa), sep="")))
ingredient <- c('all purpose flour')
function(make.pie){ make a pie }
Существует одна пустая строка в недавно созданный файл R, но как я могу вставить все пустые строки, присутствующие в исходном R-скрипте? Спасибо за любой совет.
EDIT: Я не могу дублировать пустые строки здесь, на StackOverflow. Кажется, они удаляются автоматически. StackOverflow даже удаляет отступ, который я использую, и я не могу его заменить. Извини за это. Автоматическое удаление пустых строк и отступов проблематично, когда проблема связана с форматированием. Я не могу исправить сообщение, чтобы отобразить R-код, отформатированный в моем скрипте. Тем не менее, код действительно отображается правильно, когда я активно редактирую сообщение.
EDIT: 27 июня 2013 г. Удаление пустых строк и отступов в коде исходного файла R и в коде для среднего R-файла, похоже, связано с моим ноутбуком, а не с StackOverflow. Когда я просматриваю этот пост и свои ответы на рабочем столе своего офиса, формат верен. Когда я просматриваю этот пост и мои ответы с моим ноутбуком, пустые строки и отступы исчезают. Возможно, мой монитор ноутбука неисправен. Извините, что первоначально предполагалось, что проблема связана с StackOverflow.
Как вы планируете запускать свои окончательные сценарии, такие как 'apple.pie.all.purpose.flour.arsc.Jun23.2013.r'? Я спрашиваю, потому что есть намного лучшие способы подойти к вашей проблеме. Если вы запускаете скрипты из командной строки, вы можете сделать входной файл аргументом (см. 'CommandArgs'). Если вы отправляете свой сценарий с помощью 'source' из R, вы можете просто превратить свой код в функцию, которая принимает имя файла в качестве аргумента. – flodel
Как говорит @flodel, есть много способов справиться с этим, чем текстовое переключение. Я сам поеду на функцию. –
@flodel Сценарий R будет отправлен в кластер или суперкомпьютер. Если я определяю, как создать функцию, которую вы предлагаете, я отправлю ее здесь. Независимо от того, как создаются файлы, моя цель состоит в том, чтобы оба файла R были идентичны, за исключением двух различий, которые я выделил выше. –