Посмотрите на исходный код str_replace
.
function (string, pattern, replacement)
{
replacement <- fix_replacement(replacement)
switch(type(pattern), empty = , bound = stop("Not implemented",
call. = FALSE), fixed = stri_replace_first_fixed(string,
pattern, replacement, opts_fixed = attr(pattern, "options")),
coll = stri_replace_first_coll(string, pattern, replacement,
opts_collator = attr(pattern, "options")), regex = stri_replace_first_regex(string,
pattern, replacement, opts_regex = attr(pattern,
"options")), )
}
<environment: namespace:stringr>
Это приводит к поиску fix_replacement
, который находится на Github, и я тоже поставил ниже. Если вы запустите его в своей основной среде, вы обнаружите, что fix_replacement(NA)
возвращает NA
. Вы можете видеть, что он зависит от stri_replace_all_regex
из пакета stringi
.
fix_replacement <- function(x) {
stri_replace_all_regex(
stri_replace_all_fixed(x, "$", "\\$"),
"(?<!\\\\)\\\\(\\d)",
"\\$$1")
}
Интересно то, что stri_replace_first_fixed
и stri_replace_first_regex
возвращают c(NA,NA,NA)
при запуске с вашими параметрами (ваши string
, pattern
и replacement
). Проблема в том, что stri_replace_first_fixed
и stri_replace_first_regex
— это код C++, поэтому понять, что происходит, становится немного сложнее.
stri_replace_first_fixed
можно найти здесь.
stri_replace_first_regex
можно найти здесь.
Насколько я могу понять с ограниченным временем и моим относительно ржавым знанием C++, функция stri__replace_allfirstlast_fixed
проверяет аргумент replacement
, используя stri_prepare_arg_string
. Согласно документации для этого, он выдаст ошибку, если обнаружит NA . У меня нет времени, чтобы полностью отследить это, но я подозреваю, что эта ошибка может быть причиной странного возврата всех NA.
person
TARehman
schedule
17.12.2015
as.numeric(str_replace(x, "NULL", "NA"))
- person Colonel Beauvel   schedule 17.12.2015x <- c("0", "NULL", "0"); y <- x; y[y=="NULL"] <- NA; as.numeric(y)
- person bubble   schedule 17.12.2015as.numeric(str_replace(x, "NULL", NA)) [1] 0 NA 0
- person Pierre L   schedule 17.12.2015stringr
используется для переносаbase
функций; теперь он оборачиваетstringi
функции. У вас, наверное, старая версияstringr
.gsub
ведет себя здесь корректно. - person nicola   schedule 17.12.2015stringr
(stringr_1.0.0
), и он все еще работает... - person Cath   schedule 17.12.2015stringr 1.0.0
иstringi 1.0-1
(похоже, это последние версии), и я могу воспроизвести результаты OP. Я на Убунте. зависит от ОС? - person nicola   schedule 17.12.2015stringr 1.0.0
иstringi 1.0-1
и получить то же самое, что и OP, в чистом сеансе (на OSX) - person Jaap   schedule 17.12.2015stringr
иstringi
,R 3.2.1
в Windows 7 - person Cath   schedule 17.12.2015stringr 1.0.0
,stringi 1.0-1
иR 3.2.3
в Windows 7. Сейчас я пытаюсь отследить источник. - person TARehman   schedule 17.12.2015NA
преобразуется вNA_character_
, а затем оказывается здесь:x <- c("123", "NULL", "456"); stringi:::stri_replace_first_regex(x, "NULL", NA_character_)
. (Я изменил числа, чтобы устранить возможные проблемы с 0). После этого он спускается в код C... - person user2802241   schedule 17.12.2015