Как кодировать версию substr, которая содержит ведущие нули в числовых значениях (в R)? - PullRequest
3 голосов
/ 28 мая 2019

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

substr(01001011, 2, 5) # what is in fact:"0010" (because leading 0 is ignored)
substr(01001011, 2, 5) # what I want:"1001"
substr("01001011", 2, 5) # "1001"; gives what I want BUT the following:

В substr("01001011", 2, 5) невозможно (для меня) превратить ее в функциютак как input=01001011 и двойные кавычки очень и очень проблематичны.Каждый раз, когда пользователь должен вручную вводить значение аргумента не в вызове функции, а также в теле функции, где расположена часть substr(...).

Проблема, вызванная тем, что 01001011 хранится как числовое значение, и поэтому все ведущие 0 игнорируются.

01001011 # [1] 1001011
class(01001011) # "numeric"

substrCorrectly <- function(x) {
substr("x", 2, 5) }

Например, для числа "01001011";

substrCorrectly <- function(x) {
substr("01001011", 2, 5) }
substrCorrectly(01001011) # "1001"

Эта функция определенно очень некрасива и противоречит понятию функции: каждый раз, когда пользователь должен изменить тело функции перед ее применением!

Есть идеи?

Дополнительные примеры:

substr(000101001011, 1, 4) # "1010"; but what I want is 0001 here. 
substr(10001, 1, 2) # "10" and what I want (10) coincides since 1 is leading. 

1 Ответ

2 голосов
/ 28 мая 2019

Вы можете использовать formatC, что позволит сохранить первым 0s

substrCorrectly <- function(x) { 
  x <- formatC(x, flag="0", width=8, format="d") 
  substr(x, 2, 5) 
}
substrCorrectly(01001011) # "1001"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...