Посмотрите на исходный код 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
можно найти here.
stri_replace_first_regex
можно найти here.
Насколько я могу различить с ограниченным временем и моим относительно ржавым знанием С ++, функция stri__replace_allfirstlast_fixed
проверяет аргумент replacement
, используя stri_prepare_arg_string
. Согласно documentation для этого, он выдает ошибку, если встречается с NA. У меня нет времени полностью отслеживать это за пределами этого, но я подозреваю, что эта ошибка может вызвать нечетное возвращение всех НС.
Конечно неожиданное поведение в исходном коде, который нуждается в коррекции, вам необходимо предоставить Н.А. строку, чтобы она работает: 'as.numeric (str_replace (x, "NULL", "NA")) ' –
Возможное обходное решение? 'x <- c (" 0 "," NULL "," 0 "); y <- x; y [y == "NULL"] <- NA; as.numeric (y) ' – bubble
Мне что-то не хватает, второй пример работает для меня' as.numeric (str_replace (x, "NULL", NA)) [1] 0 NA 0' –