Da ist eine Zeichenfolge mit einer (einzelnen) Nummer irgendwo drin. Ich möchte die Nummer um eins erhöhen. Einfach, oder? Ich schrieb das folgende, ohne es einen zweiten Gedanken zu geben:Inkrementieren einer Zahl in einer Zeichenfolge mit Sub
sub("([[:digit:]]+)", as.character(as.numeric("\\1")+1), string)
... und bekam eine NA.
> sub("([[:digit:]]+)", as.character(as.numeric("\\1")+1), "x is 5")
[1] NA
Warning message:
In sub("([[:digit:]]+)", as.character(as.numeric("\\1") + 1), "x is 5") :
NAs introduced by coercion
Warum funktioniert es nicht? Ich kenne andere Möglichkeiten, dies zu tun, also brauche ich keine "Lösung". Ich möchte verstehen, warum diese Methode fehlschlägt.
Kann nicht ohne eine Rückruffunktion der Gsub-Funktion arbeiten. Die Alternative besteht darin, die Zeichenfolge in einer Schleife mit einem globalen _search_ neu zu schreiben. – sln
Im Grunde genommen wird der _substitute_ string-Teil von gsub als Vorlage mit zurückreferentiellen Variablen verwendet, die durch einen _internal_ Callback formatiert werden (normalerweise nicht verfügbar). Also, Sie können Code innerhalb dieses Teils der Funktion nicht wirklich ausführen, sogar mit bösen eval (die nichts von der Übereinstimmung wissen). – sln