Seite 4 von 4

Re: Matrix aus Tabellenzeile erstellen

Verfasst: Di Apr 23, 2019 12:25 pm
von Hanna
IHallo Jörg,

ich bin am verzweifeln... es hat doch alles so schön geklappt, was du schriebst und nun gibt es immer eine Fehlermeldung
Fehler in FUN(X[], ...) :
unbenutzte Argumente (cmode = "directed", ignore.eval = FALSE)


Was mache ich falsch?

Vielen Dank,

Hanna

Code: Alles auswählen

AuswertungNetzwerk <- function(){

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

  example("betweenness")
 # str(g)

  daten <- read.table("http://forum.r-statistik.de/download/file.php?id=434", sep=",")
  daten <- as.matrix(daten)
  L <-lapply(1:nrow(daten), function(i) matrix(daten[i,], 3, byrow=TRUE))

  lapply(L, FUN=betweenness,  cmode = "directed", ignore.eval = FALSE)
  
}

jogo hat geschrieben: Do Feb 21, 2019 10:40 pm Hallo Hanna,

also
https://www.rdocumentation.org/packages ... etweenness

Dort steht, dass der Parameter dat= soll sein ein Inputgraph sein (oder mehrere).
Sieh auch das Beispiel zur Funktion:

Code: Alles auswählen

example(betweenness)
Sind denn Deine Matrizen schon vom entsprechenden Typ oder müssen sie erst umgewandelt werden?

Nachtrag:
ich habe mir jetzt das Beispiel für die Funktion betweenness() angeschaut und bin der Meinung, alles zusammen könnte so aussehen:

Code: Alles auswählen

library("sna")

example("betweenness")
str(g)

daten <- read.table("http://forum.r-statistik.de/download/file.php?id=434", sep=",")
daten <- as.matrix(daten)
L <-lapply(1:nrow(daten), function(i) matrix(daten[i,], 3, byrow=TRUE))

lapply(L, FUN=betweenness, ignore.eval = FALSE, cmode = "directed")
Gruß, Jörg

Re: Matrix aus Tabellenzeile erstellen

Verfasst: Di Apr 23, 2019 3:39 pm
von jogo
Hallo Hanna,

erstmal nur eine schnelle Antwort:
Bitte nicht die Aufrufe library(...) in eine Funktion packen :!:
Die Funktion library() macht etwas Globales, z.B. verändert sie den Suchpfad. Deshalb gehören diese Aufrufe ganz an den Anfang des Codes - außerhalb jeder Funktion.

Soweit erstmal - den Rest schaue ich mir später an.

... so (zwei Minuten später):
Dein Code definiert nur eine Funktion, führt diese aber niemals aus. Deshalb ist mir nicht klar, wie ich den von Dir beschriebenen Fehler reproduzieren soll.

Ich suche weiter ...
Bitte schau mal, ob dies passt:

Code: Alles auswählen

library("igraph")

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

L <- apply(daten, 1, function(r) graph_from_incidence_matrix(matrix(r, 3, byrow=TRUE)))

lapply(L, FUN=betweenness) # # # # # # , ignore.eval = FALSE, cmode = "directed")
Es ist wahrscheinlich so: es gibt eine neue Version des Paketes igraph, in der die Funktion betweenness() nicht mehr die Parameter hat wie in der vorherigen Paketversion. (bei mir momentan: igraph_1.2.4)
noch eine andere Vermutung:
Die Parameter gehören zu einer anderen Funktion und sind nur per Konfusion an die verkehrte Stelle gelangt (denn auf der etwas älteren Seite https://michael.hahsler.net/SMU/LearnRO ... graph.html finde ich den Parameter cmode= nicht bei der Funktion betweenness()), aber z.B.
gibt es im Paket sna eine Funktion closeness() https://www.rdocumentation.org/packages ... /closeness , welche einen Parameter cmode= hat.

Ansonsten habe ich noch dies:

Code: Alles auswählen

library("CINNA")
library("igraph")
daten <- read.table("http://forum.r-statistik.de/download/file.php?id=434", sep=",")
L <- apply(daten, 1, function(r) graph_from_incidence_matrix(matrix(r, 3, byrow=TRUE)))
lapply(L, harmonic_centrality, mode="out")
Gruß, Jörg

Re: Matrix aus Tabellenzeile erstellen

Verfasst: Mi Apr 24, 2019 10:51 pm
von Hanna
Guten Abend Jörg und danke für deine Antwort,

habe festgestellt, dass es die Parameter bei betweeness aus sna noch gibt. Nun gibt es eine Funktion mit gleichem Namen auch in igraph – ich vermute mal, dass mein "armer Rechner" da einfach durcheinander kommt (wie soll er das denn auch wissen)... kann ich (außer über die Reihenfolge er Einbindung der Pakete) angeben, aus welchem Paket die Funkion genommen wird oder gibt es jede Funktion bei gleichem Namen grundsätzlich nur einmal?

Viele Grüße

Hanna

Re: Matrix aus Tabellenzeile erstellen

Verfasst: Mi Apr 24, 2019 10:56 pm
von jogo
Hallo Hanna,

auch dafür gibt es in R eine Lösung. Es nennt sich qualifizierte Namen. Die Funktion bekommt den Paketnamen vorangesetzt, getrennt mit zwei Doppelpunkten.
sna::betweenness für die Funktion aus dem Paket sna
igraph::betweenness für die Funktion aus dem Paket igraph.
ich vermute mal, dass mein "armer Rechner" da einfach durcheinander kommt (wie soll er das denn auch wissen)...
so ein Rechner kommt nicht durcheinander. Er folgt auch in diesem Fall einem Algorithmus, in diesem Fall wird durch den Suchpfad bestimmt, welches Objekt (also aus welchem Paket) zuerst gefunden wird. Der Suchpfad ist abhängig von der Reihenfolge, in der die Pakete geladen werden.

Code: Alles auswählen

help("search")
Schau mal, ob dies passt:

Code: Alles auswählen

library("sna")
# library("keyplayer")
library("CINNA")
library("igraph")
daten <- read.table("http://forum.r-statistik.de/download/file.php?id=434", sep=",")
daten <- as.matrix(daten)
M <- lapply(1:nrow(daten), function(i) matrix(daten[i], nrow=3, byrow=TRUE))
L <- apply(daten, 1, function(r) graph_from_incidence_matrix(matrix(r, 3, byrow=TRUE)))
lapply(L, harmonic_centrality, mode="out")

lapply(L, FUN=igraph::betweenness) 
lapply(M, FUN=sna::betweenness, ignore.eval = FALSE, cmode = "directed")
Gruß, Jörg

Re: Matrix aus Tabellenzeile erstellen

Verfasst: Mi Apr 24, 2019 11:00 pm
von Hanna
Wundervoll - ich hatte es Java-like mit Punkt probiert, was natürlich nicht klappte. Mein Test, bei dem ich igraph einfach mal weg lies ging schon mal - nun kann ich es dann aber alles wieder zusammenbauen!

Danke und eine angenehmen Nachtruhe!

Viele Grüße

Hanna