У меня есть вектор, состоящий из смешанных значений двойной точности и очень коротких строк символов. Я хочу, чтобы sprintf
их, показывая результаты до n
цифр. Проблема в том, что я не могу использовать строки sprintf
, используя, например, sprintf("%.8g", x)
, поэтому вместо этого я использую "%.8s"
.Как спрятать вектор смешанных типов и строк с точностью до n цифр?
Из-за этого, если R пишет число в научной нотации, я печатаю только начало номера, и результаты не имеют смысла. Простой пример такого поведения ниже:
koza <- c(pi, " > ", 2.01645169344289e-05)
sprintf("%.8s", koza)
Что я получаю это:
[1] "3.141592" " > " "2.016451"
То, что я хочу получить либо что-то вроде:
[1] "3.1415927" " > " "0.0000202"
или
[1] "3.1415927" " > " "2.0164517e-05"
Как я могу это сделать?
Первое, что нужно сделать, чтобы сначала преобразовать в числовое. если это не na, то используйте функцию sprintf. 'unlist (lapply (koza, function (x) {ifelse (! is.na (as.numeric (x)), sprintf ("%. 8f ", as.numeric (x)), x)}))' – DJJ
@DJJ Спасибо! Отлично подходит для форматирования в том, что я делаю. Я определил это как пользовательскую функцию и использовал ее вместо sprintf(). – Kusavil