2017-03-04 2 views
-2

Wie übergeben/verwenden Zeichenfolge in [ zu Teilmenge z. Array. Ich habe über so etwas (für 4 dims-Array) gedacht:So übergeben/verwenden Sie string in [to

inputDims <- ",,'CCC'," 

outputArray[parse(text=inputDims)] 

Oben funktioniert nicht - wie dies zu erreichen?

Ich bin nicht interessiert an logischen Vektor (oder Matrix) innerhalb [ - nur Zeichenfolge (in einer Form wie im Beispiel), wenn dies möglich ist.

+0

Für downvoters: könnten Sie mir sagen, wie man damit umgehen: http://stackoverflow.com/questions/42578273/array-subset -element-aus-einer-Dimension-für-Name-dynamisch, weil dies ein komplexeres Problem ist und diese Frage der Versuch ist, es zu lösen ... – RSzT

+0

Was versuchen Sie zu erreichen? [Unterteile dynamisch eine Dimension] (http://stackoverflow.com/questions/42562823/subset-parts-of-array-with-dynamic-dimension)? –

+0

Wenn Sie 'idx <-" CCC "' setzen, gibt 'outputArray [,, idx,]' zurück, was Sie wollen. –

Antwort

0

(Dies scheint wie eine schreckliche Hack. Probleme, den Wert zu sehen, entlang dieser Linien in fortfahren, aber vielleicht wird es klären, was tobuild eine R-Funktion benötigt wird „Anruf“.)

Verwenden scan ein Zeichen Vektor zu erstellen von der richtigen Länge. Fügen Sie es dann in eine Liste ein, in der das Array das erste Element ist. Sie benötigen die „leere“ Positionen in TRUE zu konvertieren, das Aufschneiden zu bekommen, um zu folgen:

vec <- scan(text= inputDims, sep="," , what="") 
arglist <- list(outputArray) 
arglist[ 2:(length(vec)+1) ] <- as.list(vec) 
arglist[ arglist==""] <- TRUE 
# Using your example in the other question 
> do.call("[", arglist) 
    bb bbb 
a1 NA NA 
a2 NA NA 
a3 NA NA 

Sie früher abind verwiesen wurde :: asub, und wenn Sie Ameise, was Gymnastik zu sehen, es mit seinen Argumenten tut (das nicht ähnlich genug, um Ihr Problem ist) tut dies dann mit dem Paket geladen:

getAnywhere(asub.default) 
+0

Nice one - danke! Es scheint, dass die Verwendung von "TRUE" für "nicht verwendete" Dims entscheidend ist - das habe ich nicht herausgefunden. – RSzT

+0

Es ist auch wichtig, dies nach der Umwandlung in eine Liste zu tun, da logische Elemente sonst entweder auf 'Zeichen' oder 'numerisch' basierend auf dem Modus eines Vektors, in den diese Zuweisung versucht wurde, gezwungen werden. –