Иногда, когда в процессе dev есть обе рабочие станции WIN и системы LINUX (хостинг), а в коде вы не видите никакого вывода перед соответствующей строкой, это может быть форматирование файла и отсутствие Unix LF (linefeed) заканчивается.
Что мы обычно делаем, чтобы быстро исправить это, переименуйте файл, а в системе LINUX создайте новый файл вместо переименованного, а затем скопируйте его в него. Во многих случаях это решает проблему, так как некоторые из файлов, которые были созданы в WIN, когда-то перемещенные на хостинг, вызывают эту проблему.
Это исправление - это легкое исправление для сайтов, которыми мы управляем по FTP, и иногда может спасти наш новый членов команды некоторое время.
Чтобы использовать R-функции в столбце, нам нужно сначала преобразовать данные во фрейм. Это означает, что нам нужно будет восстановить интервал между исходными файлами в конце.
Во-первых, мы будем читать с colClasses = 'character'
, чтобы сохранить ведущие нули:
prf003 <- read.table(data, colClasses = "character")
prf003[, 2] <- seq.int(nrow(prf003))
Теперь мы определим вектор для расстояния между столбцами (обратите внимание, нам нужен пустой элемент в конец, поскольку после последнего столбца нет пробелов):
spacing <- c(" ", " "," "," ", " ", " ","")
И используйте mapply
с paste0
, чтобы добавить эти пробелы в конец каждого столбца (это относится к paste0(prf003[ ,1], spacing[[1]])
, paste0(prf003[ ,2], spacing[[2]])
и т.д. :
formatted_prf <- mapply(paste0, prf003, spacing)
Затем мы можем записать обратно в исходный формат файла, используя write.table
write.table(formatted_prf, "new_prf.tre", sep = "", quote = FALSE,
col.names = FALSE, row.names = FALSE)
Отметив, что оба sep
должны быть пустыми, и quote = FALSE
чтобы это не испортило наш интервал.
Это вывод write.table
:
0001 1 1BF 19.2 0.0 5500 0
0001 2 1BF 19.2 0.0 5500 0
0001 3 1BF 19.2 0.0 5500 0
0001 4 1BF 19.2 0.0 5500 0
0001 5 1BF 19.2 0.0 5500 0
0001 6 1BF 19.2 0.0 5500 0
0001 7 1BF 19.2 0.0 5500 0
Предположим, у нас есть вектор символов L
, считанный с использованием readLines
, как показано в примечании в конце. Тогда предположим, что вы хотите, чтобы замена столбца 2 также имела 2 цифры после десятичной дроби:
substr(L, 7, 12) <- sprintf("%6.2f", seq_along(L))
writeLines(L, stdout()) # replace stdout() with "myfile.dat", say
, давая:
0001 1.00 1BF 19.2 0.0 5500 0
0001 2.00 1BF 19.2 0.0 5500 0
0001 3.00 1BF 19.2 0.0 5500 0
0001 4.00 1BF 19.2 0.0 5500 0
0001 5.00 1BF 19.2 0.0 5500 0
0001 6.00 1BF 19.2 0.0 5500 0
0001 7.00 1BF 19.2 0.0 5500 0
Lines <- "0001 116.00 1BF 19.2 0.0 5500 0
0001 216.00 1BF 19.2 0.0 5500 0
0001 316.00 1BF 19.2 0.0 5500 0
0001 416.00 1BF 19.2 0.0 5500 0
0001 516.00 1BF 19.2 0.0 5500 0
0001 616.00 1BF 19.2 0.0 5500 0
0001 716.00 1BF 19.2 0.0 5500 0"
L <- trimws(readLines(textConnection(Lines)))