Форматирование вектора чисел с использованием format () в R - PullRequest
0 голосов
/ 05 мая 2018

Когда я пытаюсь отформатировать вектор чисел с помощью format (), только первое число учитывает аргумент «цифры»

format(c(1.508390e-06, 8.487128e-02,  4.185008e-01,  4.785161e-01, -8.332557e-01),        
    digits = 3, scientific = FALSE)
[1] " 0.00000151" " 0.08487128" " 0.41850080" " 0.47851610" "-0.83325570"

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

sapply(c(1.508390e-06, 8.487128e-02,  4.185008e-01,  4.785161e-01, -8.332557e-01), FUN = function(x) { format(x,digits = 3, scientific = FALSE) } )
[1] "0.00000151" "0.0849"     "0.419"      "0.479"      "-0.833"    

Я что-то здесь упускаю?

Обратите внимание, что если я установил научный = ЛОЖЬ, то все числа будут отформатированы правильно:

format(c(1.508390e-06, 8.487128e-02,  4.185008e-01,  4.785161e-01, -8.332557e-01),        
        digits = 3, scientific = TRUE)
" 1.51e-06" " 8.49e-02" " 4.19e-01" " 4.79e-01" "-8.33e-01"

1 Ответ

0 голосов
/ 05 мая 2018

Я не совсем уверен, почему вы не можете запустить атомный вектор через format() и получить желаемый результат. Это как-то связано с аргументом nsmall и количеством цифр справа от десятичного числа (что, вероятно, неизвестно), что я не совсем понимаю.

Но похоже, мы можем использовать список. От help(format):

Если x является списком, результатом является символьный вектор, полученный путем применения format.default(x, ...) к каждому элементу списка (после unlist элементов, которые сами являются списками), а затем свертывания результата для каждого элемента с paste(collapse = ", ").

Так что просто приведите ваш атомный вектор к списку, и он будет работать так, как вам нужно.

format(as.list(x), digits=3, scientific=FALSE)
# [1] "0.00000151" "0.0849"     "0.419"      "0.479"      "-0.833"   

Данные:

x <- c(1.508390e-06, 8.487128e-02,  4.185008e-01,  4.785161e-01, -8.332557e-01) 
...