Почему write.fwf() не следовал установленной ширине

Я хочу записать набор случайно сгенерированных чисел в текстовый файл с фиксированным форматом. Но по некоторым причинам write.fwf написал только 1-й столбец справа, все остальные столбцы получили одну дополнительную цифру. Как я могу это исправить? Спасибо!

    set.seed(1899)

    library(sensitivity)
    library(randtoolbox)

    par_lower <- c( 0.12,  0.13, 0.038, 0.017)
    par_upper <- c(12.00, 13.00, 3.800, 1.700)

    sample_size <- 5

    lim_para8 <- c(par_lower[1], par_upper[1])
    lim_para9 <- c(par_lower[2], par_upper[2])
    lim_parb8 <- c(par_lower[3], par_upper[3])
    lim_parb9 <- c(par_lower[4], par_upper[4])

    par_rand <- parameterSets(par.ranges = list(lim_para8, lim_para9,
                                                lim_parb8, lim_parb9),
                              samples = sample_size, method = "sobol")

    par_rand

    # write to file
    library(gdata)
    file2write <- paste("par.txt", sep = "")
    write.fwf(par_rand, file = file2write, width = c(10, 10, 10, 10), colnames = FALSE)

Результаты, достижения:

     6.060    6.56500    1.91900   0.858500
     9.030    3.34750    2.85950   0.437750
     3.090    9.78250    0.97850   1.279250
     4.575    4.95625    2.38925   0.227375
    10.515   11.39125    0.50825   1.068875

Если бы я изменился на

    write.fwf(par_rand, file = file2write, width = c(10, 9, 9, 9), 
              colnames = FALSE, quote = FALSE, rownames = FALSE)

Я получил эту ошибку

    Error in write.fwf(par_rand, file = file2write, width = c(10, 9, 9, 9),  : 
      'width' (9) was too small for columns: V4
     'width' should be at least (10)

1 ответ

Решение

Пожалуйста, попробуйте код ниже, он работает для меня. Я тестировал с несколькими форматами и все работало. Оба сегмента кода возвращают файл фиксированного формата шириной 4 x 10.

Это, конечно, подразумевает, что настройка sep в определении file2write не работает для получения желаемого результата с write.fwf

write.fwf(par_rand, file = "par2.txt", width = c(10, 10, 10, 10), colnames = FALSE, sep = "")

write.fwf(par_rand, file = file2write, width = c(10, 10, 10, 10), colnames = FALSE, sep = "")

Следующее генерирует то же самое, но с 1x10 и 3x9, как я думаю, вы хотели

write.fwf(par_rand, file = "par3.txt", width = c(10, 9, 9, 9), colnames = FALSE, sep = "")

Пожалуйста, дайте мне знать, это то, что вы хотели.

Другие вопросы по тегам