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

xyztoinp <- function(x) {
    x <- read.table(file="clipboard") 
    a <- x[,-1] 
    b <- x[,1]
    c <- ifelse(b == "C", 6,
    ifelse (b == "O", 8,ifelse (b == "H", 1, 3)))
    x <- cbind(b,c,a)
    write.table(x, file="IRCoutput", quote = FALSE,
    sep = "\t", row.names = FALSE, col.names = FALSE)
}

У меня есть два вопроса: -

Можно ли создать файл с таблицей, которую я создал с помощью этой функции, так, чтобы таблица вставлялась в середину некоторого текста?

Например

text_text_text_text_text_text_text_
text_text_text_text_text_text_text_

Neatly formated table

text_text_text_text_text_text_text_
text_text_text_text_text_text_text_

Во-вторых, я попытался изменить функцию так, чтобы она принимала имя файла в качестве переменной; т.е. xyztoinp <- function(x, NewFileName) {

И т.д ... Но это не привело к выводу с новым именем файла; кто-нибудь знает, как это делается?

Вот мой рабочий код,

Xyztoinp <- функция (x) {
x <- read.table (file = "clipboard")
a <- x [, - 1]
b <- x [, 1]
c <- ifelse (b == "C", 6,
ifelse (b == "O", 8,
ifelse (b == "H", 1, 3)))
х <- cbind (b, c, a)
zz <- file ("NewFile.inp", "w")
cat ("текст", "текст",
"текст",
"",
"текст",
"текст",
"текст", file = zz, sep = "\ n")
write.table (x, file = zz, quote = FALSE,
sep = "\ t", row.names = FALSE, col.names = FALSE)
cat ("текст", file = zz)
закрыть (zz)
}

Всем спасибо, особенно @Greg. ps Невозможно изменить имя файла в функции, но я доволен вышесказанным.

1
DarrenRhodes 3 Янв 2013 в 18:46
А) Добро пожаловать в SO. б) Пожалуйста, научитесь форматировать свой вопрос. c) См. руководство по вводу / выводу R, прилагаемое к вашей установке R.
 – 
Dirk Eddelbuettel
3 Янв 2013 в 18:48

1 ответ

Лучший ответ

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

Для создания автоматических отчетов с красиво оформленными таблицами (и другими вещами) лучший подход - создать шаблон и обработать его для создания отчета. Посмотрите на пакет knitr для получения подробной информации о том, как это сделать (вы также можете использовать пакет odfweave, функцию sweave или другие, но knitr, вероятно, является наиболее общим).

Другой вариант, если вы не хотите предварительно создавать шаблон отчета, - это пакет pander.

Переход на pander или knitr может решить и ваш второй вопрос, но если нет, то нам нужно будет посмотреть, что вы пробовали и что случилось, чтобы узнать, почему это не сработало и как помочь.

1
Greg Snow 3 Янв 2013 в 19:32
«Общая причина, по которой люди хотят ...» Я хочу создать входной файл для другой программы. Входной файл состоит из преамбулы, за которой следует сценарий, за которой следует таблица координат, за которой следует еще немного сценария. В настоящее время я пытаюсь использовать функциюink () для решения своей проблемы (после прочтения заметки @Dirk).
 – 
DarrenRhodes
3 Янв 2013 в 20:25
Если вы хотите пойти по шаблонному маршруту, тогда может помочь пакет ascii. Если вы хотите создать это на лету, тогда не используйте приемник, а откройте файловое соединение, затем используйте cat с аргументом файла, который является вашим соединением, для записи таких вещей, как преамбула, затем используйте write.table с соединением для координаты, затем снова cat. Использование открытого соединения (см. ?file) позволит различным функциям записывать в один и тот же файл без перезаписи.
 – 
Greg Snow
3 Янв 2013 в 20:31
Благодарю. Я использовал первый из примеров, найденных в файле?, И применил его к своей функции. Теперь это работает как шарм.
 – 
DarrenRhodes
3 Янв 2013 в 21:36
Спасибо за продвижение pander! Для записи: при работе с "шаблонами отчетов" другой наш пакет R, названный rapport, может быть лучшим вариантом.
 – 
daroczig
19 Янв 2013 в 04:45