Gibt es eine Möglichkeit, die Grenze von 500 Zeichen zu umgehen, wenn Ausdrücke mit as.character an Zeichen gebunden werden?

8

Ich schreibe gerade ein kleines Paket, das in multinomiale Verarbeitungsbaummodelle passen soll (für nicht benötigte Hintergrundinformationen a Webseite und eine pdf ).

Was es tut, ist Folgendes: Es liest ein Modell (d. h. Formeln) aus einer Datei und konvertiert sie (über parse ) in Ausdrücke. Später werden einige der Variablen in diesen Ausdrücken durch andere Variablen aus einer anderen Datei ausgetauscht (d. H. Modelleinschränkungen werden angewendet). Daher wird das Modell zurück in Zeichen umgewandelt (via as.character ) und der Austausch erfolgt über gsub .
Das Problem: Wenn ein einzelner Ausdruck länger als 500 Zeichen ist, werden sie durch die Umwandlung in as.character auf 500 Zeichen (oder so) gekürzt.
?as.character gibt:

  

as.character schneidet Komponenten von ab   Sprachobjekte zu 500 Zeichen   (war etwa 70 vor 1.3.1).

Hier ein Beispiel:

%Vor%

Die Frage: Können Sie diese Beschränkung um 500 Zeichen umgehen?

Ich weiß, dass wir dieses Problem umgehen können, wenn wir die Einschränkungen anwenden (d. h. die Variablen austauschen), bevor wir das Modell das erste Mal analysieren. Aber das würde eine Menge Programmierung erfordern, da die ganze Sache im Grunde bereit ist, und es wäre großartig, wenn wir diese Beschränkungen um 500 Zeichen auf andere Weise umgehen könnten.

    
Henrik 03.03.2011, 12:15
quelle

2 Antworten

7

Sie können, indem Sie hässliche Dinge mit deparse und gsub tun:

%Vor%

Mehr zum Punkt Ihrer Anwendung, können Sie deparse verwenden, um Strings aus Formeln zu machen, und benutze diese Funktion:

%Vor%

Um die dumme Längengrenze zu umgehen, die das Hinzufügen von Zeilenumbrüchen vereinfacht und einen einzelnen Ausdruck in viele Strings aufteilt, vergleiche:

%Vor%     
fabians 03.03.2011, 12:50
quelle
0

Aktualisierung:

Ab der Basisversion 2.15.0 hat das as.zeichen jetzt dieses Verhalten

  

as.character bricht Zeilen in Sprachobjekten mit 500 Zeichen und fügt Zeilenumbrüche ein.

Um die Paketversion zu erhalten, verwenden Sie:

%Vor%

Prost

    
KarlJensen 13.09.2017 07:03
quelle

Tags und Links