PotenzM <- function(strv, verb = TRUE)#FALSE { # Potenzmenge erzeugen # (C) LG # unter Verwendung von subsets() # Version 0.01 zuerst 15.10.2004 Tübingen, zuletzt 24.10.04 # Format: "[xyz],[abc],..." für Zeilen mit Codes # was nicht mit "[" anfängt, wird blind übernommen Nstrv <- "" # neuen Stringvektor initialisieren z <- 1 # Zähler neuer String auf 1 setzen (= Beginn) for(i in 1:length(strv)) # Stringvektor einmal ganz durch { if(substr(strv[i],1,1) == "[") # Potenzmenge nur, wenn mit "[" beginnt { tstrv <- unlist(strsplit(strv[i],",")) # temporär String (= Zeile) Proposition) zerteilen am Komma n <- length(tstrv) # Länge TempString = n von n über k for(j in 1: n) # temporären String einmal ganz durch { subs <- subsets(n,(n-j+1)) # von oben nach unten auszählen (n=4, 3, 2, 1, 0) if(n == (n-j+1)) subs <- t(cbind(subs)) # Spezialfall bei k=1 von n über k -> (4 1) -> nur String, keine TAB -> TAB machen # transponieren ! d <- dim(subs) # Dimension der Kombinationstabelle for(zeil in 1:d[1]) # Tabelle alle Zeilen durch { ttstrv <- "" for(spal in 1:d[2]) # Tabelle alle Spalten durch { ttstrv <- paste(ttstrv,tstrv[subs[zeil,spal]],sep=" ") # } Nstrv[z] <- ttstrv if(verb) print(paste("Stringelement an Stelle",z,"ist",Nstrv[z],sep=" ")) z <- z + 1 # Zähler neuer Stringvektor erhöhen, da neue Zeile kommt } } } else { Nstrv[z] <- strv[i] # wenn kein "[", dann blind Zeile in neuen String übernehmen (z.B. "<") z <- z + 1 } } return(TrimL(Nstrv, muell=c(" "))) # erstes leeres Blank links entfernen } ##### ##Aufrufe: # netze <- readLines("Netzwerke_FINAL_mit_NK_CodesL.txt") # Datei zeilenweise einlesen # potenzm <- PotenzM(netze,verb=TRUE) # source("ContAna.R") # hitlistepm <- HitList(potenzm,rxpat="\\[") # write.table(as.table(hitlistepm),file="potenzmenge_ausgezählt_hitliste.csv",sep=",") #TODO: "," KOMMA EINFÜGEN FÜR NETZWERKSTRUKTUREN IM ORIGINALFILE!!!! oder andere Art der Trennung!!!