Как избежать печати дополнительной строки в R при использовании write.table [duplicate]

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

Пока int(input()) достаточно для одного целого числа, я не нашел прямого способа ввода двух целых чисел. Я пробовал это:

num = input()
num1 = 0
num2 = 0

for i in range(len(num)):
    if num[i] == ' ':
        break

num1 = int(num[:i])
num2 = int(num[i+1:])

Теперь я использую num1 и num2 как целые числа. Надеюсь, это поможет.

4
задан pfifas 30 July 2014 в 13:39
поделиться

3 ответа

Это немного запутанно, но получает желаемый результат:

zz <- textConnection("foo", "w")
write.table(t(df), file = zz, col.names=F, sep=",", quote=F)
close(zz)
foo
# [1] "ID,1,2,3"   "X,a,b,c"    "Y, 1, 2,NA"
cat(paste(foo, collapse='\n'), file = 'test.csv', sep='')

Вы должны получить файл с символом новой строки после только первых двух строк данных.

3
ответ дан Thomas 23 August 2018 в 07:03
поделиться
  • 1
    Yup @Thomas, это работает! Спасибо за немедленную помощь. – pfifas 31 July 2014 в 11:43

Вы можете использовать служебную программу командной строки, например sed, для удаления конечных пробелов из файла:

sed -e :a -e 's/^.\{1,77\}$/ & /;ta'

Или вы можете начать с написания одной строки, а затем с помощью append.

3
ответ дан Hack-R 23 August 2018 в 07:03
поделиться
  • 1
    Thx @NerdLife, но решение с stringr по-прежнему производит линию в конце. – pfifas 31 July 2014 в 11:41
  • 2
    @pfifas Добро пожаловать. Оно делает? Прошу прощения, я удалю его после проверки этого позже сегодня. Я разветвил его из другого сообщения StackOverflow, в котором говорится, что он исправляет эту проблему: stackoverflow.com/questions/12185889/… – Hack-R 31 July 2014 в 15:19
  • 3
    Да, ты прав. Извините за фиктивное решение; Я уберу его сейчас. Похоже, он должен работать, я уверен, что ему просто нужна небольшая настройка, но у вас есть решение, поэтому я просто удалю его. Последнее: FYI много раз задерживает пробелы, может быть вызвано использованием типов возвращаемых кареток. – Hack-R 31 July 2014 в 16:05

Альтернатива в аналогичном ключе ответа @Thomas, но с немного меньшей типизацией. Отправьте вывод из write.csv в строку символов (capture.out). Соедините строку (paste) и разделите элементы с помощью строк (collapse = \n). Запись в файл с помощью cat.

x <- capture.output(write.csv(df, row.names = FALSE, quote = FALSE))
cat(paste(x, collapse = "\n"), file = "df.csv") 

Вы также можете использовать format_csv из пакета readr для создания символьного вектора с разрывами строк (\n). Удалите последний конец строки \n с помощью substr. Напишите в файл с помощью cat.

library(readr)
x <- format_csv(df)
cat(substr(x, 1, nchar(x) - 1), file = "df.csv")
0
ответ дан Henrik 23 August 2018 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: