Matrix aus Tabellenzeile erstellen

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

Moderatoren: EDi, jogo

Hanna
Beiträge: 24
Registriert: Mi Feb 20, 2019 5:00 pm

Re: Matrix aus Tabellenzeile erstellen

Beitrag 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
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrix aus Tabellenzeile erstellen

Beitrag 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
Hanna
Beiträge: 24
Registriert: Mi Feb 20, 2019 5:00 pm

Re: Matrix aus Tabellenzeile erstellen

Beitrag 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
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrix aus Tabellenzeile erstellen

Beitrag 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
Hanna
Beiträge: 24
Registriert: Mi Feb 20, 2019 5:00 pm

Re: Matrix aus Tabellenzeile erstellen

Beitrag 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
Antworten