Blick auf den Quellcode 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>
Dies führt zu fix_replacement
zu finden, die bei Github ist, und ich habe es unten zu setzen. Wenn Sie es in Ihrer Hauptumgebung ausführen, finden Sie, dass fix_replacement(NA)
NA
zurückgibt. Sie können sehen, dass es auf stri_replace_all_regex
beruht, die aus dem Paket stammt.
fix_replacement <- function(x) {
stri_replace_all_regex(
stri_replace_all_fixed(x, "$", "\\$"),
"(?<!\\\\)\\\\(\\d)",
"\\$$1")
}
Das Interessante daran ist, dass stri_replace_first_fixed
und stri_replace_first_regex
beide c(NA,NA,NA)
zurück, wenn mit Parametern ausführen (Ihre string
, pattern
und replacement
). Das Problem ist, dass stri_replace_first_fixed
und stri_replace_first_regex
C++ - Code sind, so dass es ein wenig schwieriger wird herauszufinden, was passiert.
stri_replace_first_fixed
kann here gefunden werden.
stri_replace_first_regex
kann here gefunden werden.
Soweit ich mit begrenzter Zeit und meinem relativ rostigen C++ - Wissen erkennen kann, überprüft die Funktion stri__replace_allfirstlast_fixed
das replacement
Argument mit stri_prepare_arg_string
. Nach der documentation dafür, wird es einen Fehler werfen, wenn es eine NA trifft. Ich habe keine Zeit, um es vollständig zu verfolgen, aber ich würde vermuten, dass dieser Fehler die ungerade Rückkehr aller NAs verursacht.
Sicherlich ein unerwartetes Verhalten im Quellcode, die korrigiert werden muss, Sie NA eine Zeichenfolge zur Verfügung stellen müssen es, um die Arbeit: 'as.numeric (str_replace (x, "NULL", "NA")) –
Mögliche Abhilfe? 'x <- c (" 0 "," NULL "," 0 "); y <- x; y [y == "NULL"] <- NA; as.numeric (y) ' – bubble
Ich muss etwas vermissen, das zweite Beispiel funktioniert für mich' as.numeric (str_replace (x, "NULL", NA)) [1] 0 NA 0' –