Seite 1 von 3
werte aus for-schleife speichern
Verfasst: Mi Sep 06, 2017 3:46 am
von jessi
Hallo zusammen,
ich habe eine for-Schleife
Code: Alles auswählen
p <- c(44,46,47,48,49)
l <- c(15,14,16,16,12)
for (i in 1:5){
count_T <- dbGetQuery(conn,paste("SELECT
CASE WHEN T IS NULL THEN -9999
WHEN T < 0 THEN 0
WHEN (T >=0 AND T <5) THEN 1
WHEN (T >=5 AND T <10) THEN 2
ELSE 10
END AS bin,
COUNT(1) as count
FROM data
WHERE (phi =",p[i],")
AND (lam = ",l[i],")
GROUP BY bin;/n"))
print(count_T)}
Soweit, so gut. Jetzt möchte ich die jeweiligen Werte (also count_T bei p = 44 und l = 15, count_T bei p = 46, l=14 usw) in ein csv-file speichern. Am besten mit den dazugehörigen p und l Werten. Probiert habe ich es mit
Code: Alles auswählen
for (i in 1:5){
... Schleife ...
df <- data.frame(p,l.count_t)
write.table(df, file =...) }
Nur hat es mir jetzt immer nur den letzten Schleifen-Durchlauf abgespeichert
Wie kann ich denn den Output meiner Schleifendurchläufe am besten abspeichern?
Danke und liebe Grüße,
Jessi
Re: werte aus for-schleife speichern
Verfasst: Mi Sep 06, 2017 6:56 am
von bigben
Re: werte aus for-schleife speichern
Verfasst: Do Sep 07, 2017 3:25 pm
von jessi
Hallo Bernhard,
danke für den Hinweis, das einlesen klappt schon mal. Jetzt möchte ich meine Ausgabe noch etwas verfeinern, weiß aber nicht, wie ich die Zuordnung richtig einbauen soll.
Code: Alles auswählen
p <- c(44,46,47,48,49)
l <- c(15,14,16,16,12)
count_T <- data.frame(name=character(0), len=numeric(0))
for (i in 1:5){
count_T <- rbind(count_T, data.frame(dbGetQuery(conn,paste("SELECT
CASE WHEN T IS NULL THEN -9999
WHEN T < 0 THEN 0
WHEN (T >=0 AND T <5) THEN 1
WHEN (T >=5 AND T <10) THEN 2
ELSE 10
END AS bin,
COUNT(1) as count
FROM data
WHERE (phi =",p[i],")
AND (lam = ",l[i],")
GROUP BY bin;/n"))))
> print(count_T)
bin count
1 0 859
2 1 1
3 2 2
4 10 1
5 0 855
6 1 1
7 2 3
8 3 1
Um die Daten später besser zuordnen zu können möchte ich gerne p und l dazu schreiben, dass der Output in etwa so aussieht:
Code: Alles auswählen
print(count_T)
p l bin count
44 15 0 859
44 15 1 1
44 15 2 2
44 15 10 1
46 14 0 855
46 14 1 1
46 14 2 3
46 14 3 1
Danke für eure Ratschläge.
Grüße, Jess
Re: werte aus for-schleife speichern
Verfasst: Do Sep 07, 2017 5:46 pm
von bigben
Wenn ich die Frage richtig verstehe, dann musst Du nur bei jedem Schleifendurchgang das jeweilige p[i] und das l[i] mit in den Dataframe schreiben. Du musst p[i] und l[i] also in die data.frame-Anweisung schreiben, die Du im rbind-Aufruf benutzt.
LG,
Bernhard
Re: werte aus for-schleife speichern
Verfasst: Do Sep 07, 2017 10:58 pm
von jessi
Hallo,
super danke, jetzt funktioniert es. Ich hatte es ohne den Index
Grüße, Jess
Re: werte aus for-schleife speichern
Verfasst: Mi Feb 06, 2019 2:13 pm
von jasi
Hallo,
ich habe ein ähnliches Problem mit meinem Code. In meinem Output werden leider nur die Ergebnisse des letzte Durchlauf ausgegeben. Was kann ich tun, damit alle Ergebnisse pro Iteration abgespeichert und ausgegeben werden?
Vielen Dank im Voraus
Code: Alles auswählen
x_exp<-as.matrix(data[1:100,2:96])
y_exp<-Surv(data$timeDFS[1:100],data$statusDFS[1:100])
for(i in 0:3){
fit <- glmnet::glmnet(x_exp,y_exp,family="cox", alpha=1)
t <- floor(runif(1, 1, 100))
print(paste0("ZV:", t))
set.seed(t)
cv.fit <- cv.glmnet(x_exp,y_exp,family="cox", alpha=1)
plot(cv.fit)
lambda.min <- cv.fit$lambda.min
coefficients <- coef(fit,s=cv.fit$lambda.min)
active.index <- which(coefficients!=0)
active.coefficients <- coefficients[active.index]
print(paste0(active.index))
print(paste0("lambda.min:", lambda.min))
print (coefficients)
print(active.coefficients)
write.table(cbind(active.coefficients, active.index, lambda.min), "mydata.txt", sep=",")
}
Re: werte aus for-schleife speichern
Verfasst: Mi Feb 06, 2019 3:52 pm
von jogo
Hallo jasi,
willkommen im Forum!
Was sollen die Ergebnisse der Schleife sein?
Gruß, Jörg
Re: werte aus for-schleife speichern
Verfasst: Mi Feb 06, 2019 4:00 pm
von jasi
Hallo Jörg,
die Schleife sollte pro Durchlauf (i) die Lasso-Cox-Regression für einen zuvor eingelesenen Datensatz berechnen. Pro Durchlauf soll mir R die coefficients (CoefficientenListe) und die Varibalen " active.coefficient, active.index und lambd.min" ausgeben. Das macht der Code auch und gibt mir in der Console pro Durchlauf alles an.
Jedoch möchte ich mit dem letzten Befehl write.table, dass er mir für alle Durchläufe i alle Variablen (=alle pro Durchlauf) in einer Textdatei ausgibt.
Leider gibt er mir aber immer nur die Werte für den letzten Durchlauf aus. Das heißt er überschreibt alle Werte.
Wie bekomme ich das hin, dass ich alle Werte für jede Iteration mit write.table ausgespuckt bekomme?
Ich bin regelrecht am verzweifeln
Re: werte aus for-schleife speichern
Verfasst: Mi Feb 06, 2019 4:07 pm
von bigben
Erstens das da nochmal:
Du schreibst halt bei jedem Schleifendurchlauf eine neue Datei und überschreibst damit die alten Daten. Ansatz Nummer 1 wäre, mit einem der im oben verlinkten Thread zitierten Mittel die Daten aufzuheben.
Zweitens:
Wenn Dir erstens zu kompliziert erscheint, dann kannst Du mit
alle möglichen Steuerargumente für die Funktion
write.table finden. Darunter auch das Argument
append welches Dein Problem beheben sollte.
LG,
Bernhard
Re: werte aus for-schleife speichern
Verfasst: Mi Feb 06, 2019 4:16 pm
von jasi
Hallo Bernhard,
deine Verlinkung hatte ich schon ausprobiert. Leider hat das nicht funktioniert..
Mit append bin ich auch schon am rumspielen, doch leider gibt dies mir nur die letzten 2 Durchläufe an und den Rest nicht:
x_exp<-as.matrix(data[1:100,2:96])
y_exp<-Surv(data$timeDFS[1:100],data$statusDFS[1:100])
for(i in 0:3){
M <- cbind(active.index, active.coefficients, lambda.min)
append(M, cbind(active.coefficients, active.index, lambda.min))
fit <- glmnet::glmnet(x_exp,y_exp,family="cox", alpha=1)
t <- floor(runif(1, 1, 100))
print(paste0("ZV:", t))
set.seed(t)
cv.fit <- cv.glmnet(x_exp,y_exp,family="cox", alpha=1)
plot(cv.fit)
lambda.min <- cv.fit$lambda.min
coefficients <- coef(fit,s=cv.fit$lambda.min)
active.index <- which(coefficients!=0)
active.coefficients <- coefficients[active.index]
print(paste0(active.index))
print(paste0("lambda.min:", lambda.min))
print(active.coefficients)
print (coefficients)
write.table(append(M, cbind(active.index,active.coefficients, lambda.min)), "M.txt")
#write.table(cbind(active.coefficients, active.index, lambda.min), "mydata.txt", sep=",")
}
Lieb Grüße
Jasi