Seite 1 von 1
Dateneinlesen mit For-Schleife
Verfasst: Mi Jul 03, 2019 10:57 am
von MSch
Hi Zusammen,
ich habe ein paar Fragen rund um das Einlesen von Daten mit einer For-Schleife.
1)
Der erste Punkt befasst sich mit den abfragen der Daten. Dies mach ich mit folgenden Befehl:
Code: Alles auswählen
PLAN <- read.table("Pläne/PAT00.txt", header=TRUE , sep=",")
Hier ist die Frage wie ich am besten den Namen des txt file (PAT00 --> PAT01....) in der Schleife hochzählen lassen kann.
Hierfür habe ich den "assign(paste(),) " befehl gefunden aber es nicht hinbekommen.
Die Daten werden dann verarbeitet und am Schluss sollen sie so abgespeichert werden:
Auch hier will ich nun dass PAT00 mit der Schleife hochzählt. Was dann so aussehen sollte
Code: Alles auswählen
assign(paste("PAT0",i, sep = ""),lapply(ROIs, FUN=mySel) )
names(PAT00) <- ROIs
wobei ich auch nicht weiß wie ich es bei "names(PAT00) <- ROIs" am besten mach das es mit hoch läuft.
Re: Dateneinlesen mit For-Schleife
Verfasst: Mi Jul 03, 2019 11:06 am
von jogo
Hallo MSch,
bitte nicht
assign(), sondern stelle die Dataframes in eine Liste.
Code: Alles auswählen
Dateinamen <- paste0("Pläne/PAT", c("00", "01", "02")) # das geht noch eleganter mit sprintf()
L <- lapply(Dateinamen, function(Datei) read.table(Datei, header=TRUE, sep=","))
Aus dem Rest werde ich leider nicht schlau, z.B.
names(PAT00) <- ROIs bedeutet, dass das Objekt
ROIs ein character-Vektor sein muss, weshalb ich nicht verstehe, was bei
lapply(ROIs, FUN=mySel) die Funktion
mySel() mit einem einzelnen character anstellt.
Gruß, Jörg
p.s.:
Bitte verwende Formatierungen für Codeschnippsel:
viewtopic.php?f=20&t=29
Re: Dateneinlesen mit For-Schleife
Verfasst: Mi Jul 03, 2019 11:22 am
von MSch
Hi Jogo
danke wieder für die schnelle Antwort.
Ich blicke bei deinem Vorschlag noch nicht ganz durch. Wo kommt hier die Laufvariable (sei es i) bei dir ins Spiel.
was soll die variable "Datei" darstellen? ist das einfach nur der Name anstelle des Pfades????
Re: Dateneinlesen mit For-Schleife
Verfasst: Mi Jul 03, 2019 11:24 am
von jogo
Hallo MSch,
achso, Du möchtest unbedingt ein
i sehen. Wenn Du das
i so gerne magst als Laufvariable, dann ist dies die Variante für Dich:
Code: Alles auswählen
Dateinamen <- paste0("Pläne/PAT", c("00", "01", "02")) # das geht noch eleganter mit sprintf()
L <- lapply(Dateinamen, function(i) read.table(i, header=TRUE, sep=","))
In meiner vorherigen Version war
Datei der formale Parameter der anonymen Funktion.
Gruß, Jörg
Re: Dateneinlesen mit For-Schleife
Verfasst: Mi Jul 03, 2019 11:37 am
von MSch
Okay ich kapier nicht was du machst. Ist R einfach soviel anders als matlab.....
ich such einfach nur nach etwas damit ich einen Variable mit einem String verbinden kann,
damit ich mein Namen PATij mit zwei for schleifen mit Laufvariable i j hochzählen kann.
Re: Dateneinlesen mit For-Schleife
Verfasst: Mi Jul 03, 2019 11:38 am
von MSch
vielleicht fang ich besser noch mal mit einem ordentlich Tutorial an.... das ist so frustrierend. Vorschläge?
Re: Dateneinlesen mit For-Schleife
Verfasst: Mi Jul 03, 2019 11:46 am
von MSch
Code: Alles auswählen
#Packet laden
library(dplyr)
#Workspace aufräumen
rm(list = ls())
#Daten einlesen von Pfad
BRHypo <- read.table("Patientenpläne/PAT00.txt", header=TRUE , sep=",")
#Erstellen eines Arrays mit allen gewünschten ROIs
ROIs <- c("PTV1","PTV2","Shell1","Shell2","L.Lung","R.Lung","R.Breast","Heart","Ventricle","PTVResidual","PTVRest")
Unit <- c("Dose(Gy)","Vol(cc)")
#Vektor für ROIs mit Dose und Vol definiert
ROIsU <- c("Start")
#For-Schleife fügt den ROIs Einheiten hinzu und erstell Vektor
x=-1
for(i in 1:11){x=x+2;
ROIsU[x]<- paste(ROIs[(x+1)/2],Unit[1]);
ROIsU[x+1] <- paste(ROIs[(x+1)/2],Unit[2]);
}
#Funktion (MySelection) die nach "name" sucht und die 2 folgenden Spalten ausgibt
mySel <- function(name) {
i <- which(grepl(name, names(BRHypo), fixed=TRUE))
BRHypo[(i+1):(i+2)]
}
# Liste der Dataframes
PAT00 <- lapply(ROIs, FUN=mySel)
names(PAT00) <- ROIs
das ist im Moment mein Skript. Nun will ich einfach nur die Daten die von PAT00 bis PAT99 als txt. file vorhanden sind einlesen sortieren mit der MySel function die einfach nur nach Begriffen sucht und die entsprechenden Spalten dann ausgibt und diese dann wieder in einer Liste für jede Datei mit dem gleichen namen also PAT00 bis PAT99 speichern. Dabei wollte ich einfach zwei For schleifen um den Skript setzen eine die mit "i" PATi0 durchzählt eine die mit "j" PAT0j durchzählt. Aber ich finde keine gescheiden Befehle um mir die Namen in einer Schleifen zusammen zu basteln. Irgendwas was ein String mit der Laufvariablen verbindet und wieder als String ausgibt
Re: Dateneinlesen mit For-Schleife
Verfasst: Mi Jul 03, 2019 12:04 pm
von jogo
MSch hat geschrieben: Mi Jul 03, 2019 11:37 am
Okay ich kapier nicht was du machst. Ist R einfach soviel anders als matlab.....
etwas schon, deshalb wechselte ich auch von
octave zu
R.
ich such einfach nur nach etwas damit ich einen Variable mit einem String verbinden kann,
damit ich mein Namen PATij mit zwei for schleifen mit Laufvariable i j hochzählen kann.
Code: Alles auswählen
for (i in 1:3) for (j in 5:8) print(sprintf("PAT%d%d", i, j))
oder
Code: Alles auswählen
dij <- expand.grid(i=1:3, j=5:8)
dij$pat <- sprintf("PAT%d%d", dij$i, dij$j)
dij
Re: Dateneinlesen mit For-Schleife
Verfasst: Fr Jul 12, 2019 2:57 pm
von MSch
Hi jogo,
nach langem rum machen habe ich festgestellt, dass es viel einfacher war als gedacht. Ich glaube langsam kommt das Gefühl für R^^
Dieser Ansatz hat mich zum Ziel geführt:
Code: Alles auswählen
for (i in 1:3) for (j in 5:8) print(sprintf("PAT%d%d", i, j))
Vielen Dank