In R sind die häufigsten Fälle dieses Fehlers: "Wert von SET_STRING_ELT () muss ein 'CHARSXP' sein, kein 'Zeichen'"

8

Ich kämpfe mit einem seltsamen Problem in R. Ich benutze eine alte Version von Rcpp, um R mit C ++ zu integrieren (leider ist das Upgrade keine Option!), die Rcpp, die ich verwende, ist die alte RccpTemplate. Ich bezweifle jedoch, dass das Problem dort ist.

Ich habe einen R-Code, der die meiste Zeit gut läuft, aber manchmal (besonders bei der Verarbeitung großer Datenmengen) auf geheimnisvolle Weise mit Value of SET_STRING_ELT() must be a 'CHARSXP' not a 'character'

ausfällt

Bei Listenoperationen schlägt es immer fehl, z. B .:

%Vor%

Aber wenn ich options(error=recover) verwende und nach dem Fehler dasselbe versuche, kann die Zuweisung ohne Probleme durchgeführt werden. Das C ++ befasst sich nur mit numerischen Vektoren und ist tatsächlich in der Zeit weit entfernt von einem Code aus den Zuweisungen, die fehlschlagen.

Meine vage Frage lautet also: Was sind die häufigsten Ursachen für ein solches Verhalten? Schlechte Erinnerung? Schlechte Objekte (vielleicht schlecht RcppResultSet )? Ich habe Probleme, dieses Problem anzugreifen ...

Der Vollständigkeit halber:

%Vor%     
Dr G 01.04.2011, 09:08
quelle

1 Antwort

12

Das kommt von einem Fehler im C-Code, wahrscheinlich in einem Paket, das Sie verwenden (nicht R selbst). Entweder wird der C-Code falsch geschrieben und Sie bewerten diesen Code-Zweig nur manchmal, oder der C-Code wird falsch geschrieben und beschädigt den Speicher. Wahrscheinlich erfordert dies einen C-Debugger; Ich bin mir nicht sicher über Solaris, aber unter Linux würde ich ein Skript erstellen, das den Fehler zuverlässig reproduziert (dies kann etwas Arbeit erfordern, ist aber ein wesentlicher Schritt), dann tun Sie

%Vor%

und dann ist es eine sorgfältige Prüfung des Codes, vor allem auf der Suche nach Missbrauch von PROTECT . Siehe gdb help . Ich würde dringend vorschlagen, R und Ihre Pakete zu aktualisieren, da Bugs behoben werden und Sie investieren eine erhebliche Menge an Zeit in diese.

    
Martin Morgan 01.04.2011, 17:08
quelle

Tags und Links