Matrix aus Tabellenzeile erstellen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrix aus Tabellenzeile erstellen

Beitrag von jogo »

Hallo Hanna,

kannst Du bitte trotzdem den nicht funktionierenden Code zeigen und erläutern, was Du erreichen möchtest?
Welchen Algorithmus versuchst Du umzusetzen? Wie soll das Ergebnis aussehen?
Hanna hat geschrieben: Sa Mär 30, 2019 3:52 pm ich habe eine neue Herausforderung. Und zwar benötige ich nun ein igraph Objekt, um dort damit die "harmonic closeness" zu berechnen. Leider scheitere ich an der Erzeugung des Objektes. Meine Datenbasis ist noch die gleiche, die ich zum Download bereit gestellt habe. Ich probierte schon einiges, aber entweder passt es an sich nicht oder ich konnte die Daten nicht in double umwandeln (was laut Fehlermeldung aber gefordert ist).
Gruß, Jörg
Hanna
Beiträge: 24
Registriert: Mi Feb 20, 2019 5:00 pm

Re: Matrix aus Tabellenzeile erstellen

Beitrag von Hanna »

Hallo Jörg,

anbei mein Code-Fragment

Code: Alles auswählen

  library("sna")
  library("keyplayer")
  library("CINNA")
  library("igraph")

  
    daten <- read.table("~Pfad", sep=",")
  daten <- as.matrix(daten)
  H <- harmonic_centrality(daten, vids = V(x), mode = c("out"),weights = NULL)
Ziel ist, dass ich die harmonic_centrality (cas CINNA) berechnen kann, dafür ist aber ein igraph-Format notwendig und das zu erzeugen will nicht klappen...

Viele Grüße,

Hanna
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrix aus Tabellenzeile erstellen

Beitrag von jogo »

Hallo Hanna,

schau Dir die Funktionen im Paket igraph an. Dort müsste es Funktionen geben, die verschiedene Datenstrukturen in ein igraph-Objekt umwandeln können (dabei wird die jeweilige Datenstruktur genommen und als Definition eines Graphen interpretiert).
Da ich Deine Datenstruktur nicht kenne, kann ich nicht wissen, welche dieser Funktionen Du nehmen musst.

Gruß, Jörg
Hanna
Beiträge: 24
Registriert: Mi Feb 20, 2019 5:00 pm

Re: Matrix aus Tabellenzeile erstellen

Beitrag von Hanna »

Hallo Jörg,

ich habe nochmal weitergemacht,

Code: Alles auswählen

  daten <- read.table("~pfad, sep=",")

  daten <- as.matrix(daten)

   L <-lapply(1:nrow(daten), function(i) matrix(daten[i,], 4, byrow=TRUE))
 
   net2 <-graph_from_incidence_matrix(L)
bekomme dann aber die Fehlermeldung:
Fehler in snaAuswertung2() :
(list) Objekt kann nicht nach 'double' umgewandelt werden
Auch mit

Code: Alles auswählen

 daten <- as.numeric(daten)
bzw

Code: Alles auswählen

daten <- as.double(daten)
komme ich nicht weiter.
Meine Datenstruktur ist die, die im Dateianhang unter download/file.php?id=434 zu finden ist.

Vielen Dank und Grüße,

Hanna
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrix aus Tabellenzeile erstellen

Beitrag von jogo »

Hallo Hanna,

ich bekomme ein igraph-Objekt wie folgt:

Code: Alles auswählen

library("igraph")

daten <- read.table("http://forum.r-statistik.de/download/file.php?id=434", sep=",")

G <- graph_from_incidence_matrix(as.matrix(daten))
str(G)
class(G)
Es geht sogar:

Code: Alles auswählen

library("igraph")

daten <- read.table("http://forum.r-statistik.de/download/file.php?id=434", sep=",")

G <- graph_from_incidence_matrix(daten)
str(G)
class(G)
weil, die Funktion graph_from_incidence_matrix() das erste Argument in eine Matrix umwandelt (wenn möglich).

Gruß, Jörg
Hanna
Beiträge: 24
Registriert: Mi Feb 20, 2019 5:00 pm

Re: Matrix aus Tabellenzeile erstellen

Beitrag von Hanna »

Hallo Jörg,

einen Fehler gibt es nicht, aber meine Daten werden falsch interpretiert. In meinen Testdaten stehen 3x3-Matrizen drin, ich denke, dass es so als eine Matrix interpretiert wird.

Ich hatte das mit

Code: Alles auswählen

L <-lapply(1:nrow(daten), function(i) matrix(daten[i,], 3, byrow=TRUE))
probiert, wenn ich das dann aber mit

Code: Alles auswählen

net2 <-graph_from_incidence_matrix(L)
weiterbearbeite, bekomme ich den Fehler, dass es nicht in double umwandelbar ist. Hast du da noch einen Rat?

Vielen Dank und sonnige Grüße,

Hanna
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrix aus Tabellenzeile erstellen

Beitrag von jogo »

Hallo Hanna,

wie schaut es mit

Code: Alles auswählen

library("igraph")

daten <- read.table("http://forum.r-statistik.de/download/file.php?id=434", sep=",")

apply(daten, 1, function(r) graph_from_incidence_matrix(matrix(r, 3, byrow=TRUE)))
aus?
Du bekommst dann eine Liste mit 6 Elementen, jedes Element ist ein igraph-Objekt.

Gruß, Jörg
Hanna
Beiträge: 24
Registriert: Mi Feb 20, 2019 5:00 pm

Re: Matrix aus Tabellenzeile erstellen

Beitrag von Hanna »

Hallo Jörg,

nach eine Kindergeburtstagswoche komme ich erst heute wieder dazu, mich mit meiner Auswertung zu beschäftigen...

Die Werte kriege ich raus, aber die Funktion ist trotzdem noch mit dem Input unzufrieden :(

Code: Alles auswählen

  daten <- read.table("http://forum.r-statistik.de/download/file.php?id=434", sep=",")
  
  G <- apply(daten, 1, function(r) graph_from_incidence_matrix(matrix(r, 3, byrow=TRUE)))
  
  H <- harmonic_centrality(G, vids = V(G), mode = c("out"),weights = NULL)
Wo mache ich den Fehler? :?:

Viele Grüße, Hanna
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrix aus Tabellenzeile erstellen

Beitrag von jogo »

Hallo Hanna,

aus welchem Paket ist die Funktion harmonic_centrality() :?:
ok, aus dem Paket CINNA
Dort steht im Hilfetext:

Code: Alles auswählen

Usage
    harmonic_centrality(x, vids = V(x), mode = c("all", "out", "in"),
      weights = NULL)
Arguments
x An igraph or a network object
vids Nodes to be considered in the calculation
Du übergibst in Deinem Code eine Liste von igraph-Objekten an die Funktion.
Die Funktion möchte im Parameter x= aber nur einen einzelnen igraph.
Möchtest Du vielleicht:

Code: Alles auswählen

H <- lapply(G, function(g) harmonic_centrality(g, vids=V(g), mode="out"))
:?:

Gruß, Jörg
Hanna
Beiträge: 24
Registriert: Mi Feb 20, 2019 5:00 pm

Re: Matrix aus Tabellenzeile erstellen

Beitrag von Hanna »

Ich glaube, das ist es! Danke dir vielmals, Jörg!!

Sonnige Grüße,

Hanna
Antworten