Mit "Anwenden" können Sie eine Funktion auf eine Matrix anwenden, deren Parameter spaltenspezifisch sind

7

Ich versuche, Schleifen zu vermeiden, indem ich apply verwende, um eine benutzerdefinierte Funktion auf eine Matrix anzuwenden. Das Problem, das ich habe, ist, dass es zusätzliche Parameter gibt, die meine Funktion verwendet, und sie unterscheiden sich für jede Spalte der Matrix. Unten ist ein Spielzeugbeispiel.

Sagen wir, ich habe die folgende Funktion:

%Vor%

und ich möchte es auf eine Matrix bar mit verschiedenen Werten von a , b und c für jede Spalte anwenden.

%Vor%

In diesem Fall für die erste Spalte von bar , dann a=4 , b=3 und c=1 . Ich habe es versucht,

%Vor%

Dies ist jedoch eindeutig falsch, da jede Spalte alle Parameter nacheinander verwendet, bevor sie wieder zum ersten Parameter zurückkehrt. Irgendwelche Vorschläge?

    
Lyngbakr 15.05.2015, 17:13
quelle

5 Antworten

12

Wir könnten split den 'Balken' durch 'Spalte' ( col(bar) ) und mit mapply können wir 'foo' für die entsprechenden 'a', 'b', 'c' Werte für jede Spalte anwenden von 'bar'

%Vor%

Oder ohne apply

zu verwenden %Vor%     
akrun 15.05.2015, 17:17
quelle
9

Ich verstehe nicht, warum Sie sich überhaupt mit einer Funktion beschäftigen:

%Vor%     
joran 15.05.2015 17:38
quelle
3

Ich denke, dass Sie einfach Ihre Matrix transponieren und Vektorisierung verwenden können:

%Vor%

Dies sollte für jede vektorisierte foo funktionieren.

    
nicola 15.05.2015 17:42
quelle
2

Sie könnten Ihre Parameter in den Vektor einfügen:

%Vor%

was

ergibt %Vor%     
Frank 15.05.2015 17:25
quelle
2
___ qstnhdr ___ Mit "Anwenden" können Sie eine Funktion auf eine Matrix anwenden, deren Parameter spaltenspezifisch sind ___ qstntxt ___

Ich versuche, Schleifen zu vermeiden, indem ich sweep verwende, um eine benutzerdefinierte Funktion auf eine Matrix anzuwenden. Das Problem, das ich habe, ist, dass es zusätzliche Parameter gibt, die meine Funktion verwendet, und sie unterscheiden sich für jede Spalte der Matrix. Unten ist ein Spielzeugbeispiel.

Sagen wir, ich habe die folgende Funktion:

%Vor%

und ich möchte es auf eine Matrix %code% mit verschiedenen Werten von %code% , %code% und %code% für jede Spalte anwenden.

%Vor%

In diesem Fall für die erste Spalte von %code% , dann %code% , %code% und %code% . Ich habe es versucht,

%Vor%

Dies ist jedoch eindeutig falsch, da jede Spalte alle Parameter nacheinander verwendet, bevor sie wieder zum ersten Parameter zurückkehrt. Irgendwelche Vorschläge?

    
___ answer30265248 ___

Wir könnten %code% den 'Balken' durch 'Spalte' ( %code% ) und mit %code% können wir 'foo' für die entsprechenden 'a', 'b', 'c' Werte für jede Spalte anwenden von 'bar'

%Vor%

Oder ohne %code%

zu verwenden %Vor%     
___ answer30265667 ___

Ich denke, dass Sie einfach Ihre Matrix transponieren und Vektorisierung verwenden können:

%Vor%

Dies sollte für jede vektorisierte %code% funktionieren.

    
___ tag123r ___ R ist eine freie, quelloffene Programmiersprache und Softwareumgebung für statistische Berechnungen, Bioinformatik, Visualisierung und allgemeine Datenverarbeitung. Stellen Sie minimale, reproduzierbare, repräsentative Beispiele für Ihre Fragen bereit. Verwenden Sie dput () für Daten und geben Sie alle Nicht-Basis-Pakete mit Bibliotheksaufrufen an. Bilder für Daten oder Code nicht einbetten, eingerückte Codeblöcke verwenden. Verwenden Sie für statistische Fragen http://stats.stackexchange.com. ___ answer30265526 ​​___

Sie können %code% ; Normalerweise wird hier der Mittelwert aus jeder Spalte subtrahiert, aber Sie können stattdessen einen Index übergeben, um eine parallele Indexierung über a, b und c zu erhalten:

%Vor%     
___ answer30265605 ___

Ich verstehe nicht, warum Sie sich überhaupt mit einer Funktion beschäftigen:

%Vor%     
___ tag123apply ___ Eine Funktion zum Aufrufen einer anderen Funktion mit einer Liste von Argumenten. ___ answer30265396 ___

Sie könnten Ihre Parameter in den Vektor einfügen:

%Vor%

was

ergibt %Vor%     
___
Neal Fultz 15.05.2015 17:34
quelle

Tags und Links