nsdplot <- xyplot (nsdall ~ zerostart/3600, data = datansd1, col = "grey", type = 'b', ylab = expression paste"
Net Squared Displacement
Moderator: jogo
Re: Net Squared Displacement
Schau Dir bitte noch einmal diese Code-Zeile genau an:
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube
Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube
Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
-
- Beiträge: 17
- Registriert: Fr Aug 26, 2022 2:47 pm
Re: Net Squared Displacement
Ja, genau das zeigt R in der Fehlermeldung an, aber wie korrigiere ich das?
Das hier ist die entsprechende Zeile aus dem Original-Skript:
nsdplot <- xyplot (nsdall ~ zerostart/3600, data = datansd1, col = "grey", type = 'b', ylab = expression paste('Net squared displacement ', ' ', (km^2))), xlab = "Hours after trip start")
plot (nsdplot)
Das hier ist die entsprechende Zeile aus dem Original-Skript:
nsdplot <- xyplot (nsdall ~ zerostart/3600, data = datansd1, col = "grey", type = 'b', ylab = expression paste('Net squared displacement ', ' ', (km^2))), xlab = "Hours after trip start")
plot (nsdplot)
Re: Net Squared Displacement
Hi!
expression ist eine Funktion und wie üblich erwartet diese Funktion, dass nach ihrem Namen eine Klammer aufgeht und in der Klammer das oder die Argumente stehen. Stattdessen steht da mit paste der nächste Funktionsname, und das versteht R natürlich nicht. Außerdem gilt der banale Satz, dass in einem Kommando immer genausoviele Klammern auf wie zu gemacht werden müssen, was hier nicht geschieht. Ich vermute mal, dass man einfach nur zwischen expression und paste eine Klammer auf machen müsste, aber um das auszuprobieren müsste man geeignete Musterdaten haben.
LG,
Bernhard
expression ist eine Funktion und wie üblich erwartet diese Funktion, dass nach ihrem Namen eine Klammer aufgeht und in der Klammer das oder die Argumente stehen. Stattdessen steht da mit paste der nächste Funktionsname, und das versteht R natürlich nicht. Außerdem gilt der banale Satz, dass in einem Kommando immer genausoviele Klammern auf wie zu gemacht werden müssen, was hier nicht geschieht. Ich vermute mal, dass man einfach nur zwischen expression und paste eine Klammer auf machen müsste, aber um das auszuprobieren müsste man geeignete Musterdaten haben.
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Net Squared Displacement
Hier die "richtigen" Originalzeilen, vollständig und etwas anders formatiert:
Code: Alles auswählen
nsdplot <- xyplot(nsdall ~ zerostart/3600, data=datansd1, col="grey", #color for the observed locations
type='b', # 'b' shows the locations as dots, with a line connecting
#successive locations. Can also be 'p' for just the locations, or 'l' for just
#the line between locations
ylab=expression(paste('Net squared displacement ',' ', (km^2))), #y axis label
xlab="Hours after trip start")
plot(nsdplot)
Re: Net Squared Displacement
Zu dem ganzen "Kapitel 3" gibt es ein PDF-Skript, das zwar nicht gut, aber besser lesbar ist: https://ecosystems.psu.edu/research/lab ... ink-to-pdf
-
- Beiträge: 17
- Registriert: Fr Aug 26, 2022 2:47 pm
Re: Net Squared Displacement
Hallo,
nachdem das Problem mit dem Zeitstempel endlich gelöst ist, läuft das Skript bis hierhin fehlerfrei:
Jetzt hängt es an der nächsten Stelle:
Wenn ich das laufen lasse, bekomme ich diese Fehlermeldung:
Fehler in `[.data.frame`(data, c("X", "Y")) :
nicht definierte Spalten gewählt
Wo hängt es denn jetzt? Allmählich bin ich nur noch , ich will damit einfach nur noch fertig werden !!!
nachdem das Problem mit dem Zeitstempel endlich gelöst ist, läuft das Skript bis hierhin fehlerfrei:
Code: Alles auswählen
Duemmer$NewDate <- as.POSIXct(Duemmer$timestamp, format="%Y-%m-%d %H:%M:%S", origin="1970-01-01")
timediffD <- diff(Duemmer$NewDate)*60*60
Duemmer <- Duemmer [-1,]
Duemmer$timelag <-as.numeric(abs(timediffD))
summary(Duemmer$timelag)
# Duemmer <- subset(Duemmer, Duemmer$timelag < 18000)
Duemmer $Year <- format(Duemmer $NewDate, "%Y")
# Duemmer <- subset(Duemmer, Duemmer $Year != "NA")
Duemmer $YearBurst <- c(paste(Duemmer $trackId, Duemmer $Year, sep="_"))
Duemmer $YearBurst <- as.factor(Duemmer $YearBurst)
str(Duemmer)
summary(Duemmer $YearBurst)
Duemmer <- subset(Duemmer, table(Duemmer $YearBurst)[ Duemmer $YearBurst] > 100)
Duemmer $YearBurst <- factor(Duemmer $YearBurst)
Dd1 <- Duemmer
str(Dd1)
indataD <-Dd1
innamesD <- unique(Dd1$ YearBurst)
innamesD <- innamesD [1:22]
outnamesD <- innamesD
Code: Alles auswählen
for (i in 1:length(innamesD)){
data <- indataD [which(indataD$YearBurst==innamesD[i]),]
if(dim(data)[1] != 0){
data.xy = data [c("X", "Y")]
coordinates(data.xy) <- ~X+Y
sppt <- SpatialPointsDataFrame(coordinates(data.xy), data)
proj4string(sppt) <- CRS("+proj=utm +zone=12 +datum=WGS84")
write.table(sppt, paste(outnamesD[i], "txt", sep="."), sep="\t", quote=FALSE, row.names=FALSE)
write.table(paste(outnamesD[i], "txt", sep="."), sep="\t", quote=FALSE, row.names=FALSE, col.names=FALSE, "In_list.txt", append=TRUE)
}}
Fehler in `[.data.frame`(data, c("X", "Y")) :
nicht definierte Spalten gewählt
Wo hängt es denn jetzt? Allmählich bin ich nur noch , ich will damit einfach nur noch fertig werden !!!
Re: Net Squared Displacement
hm, in einem Dataframe ist doch die zweite Dimension für die Spalten zuständig; etwa so?
Gruß, Jörg
Code: Alles auswählen
data.xy = data [, c("X", "Y")]
Re: Net Squared Displacement
Hallo Jörg,
das war auch mein erster Gedanke. Tatsächlich scheint R damit aber kein Problem zu haben:
LG,
Bernhard
Nachtrag: Ok, da muss man erstmal drauf kommen: Diese Syntax ist völlig in Ordnung für "richtige" data.frames, aber sie funktioniert nicht mit data.tables:
Arthemisia: Versuch mal, knapp vor Auftreten des Fehlers Deinen data.table in eine "richtigen" data.frame umzuwandeln. Das geht mit
das war auch mein erster Gedanke. Tatsächlich scheint R damit aber kein Problem zu haben:
Code: Alles auswählen
bsp <- data.frame(X = 1:3,
Y = 2:4,
Z = 3:5)
bsp[c("X", "Y")]
#> X Y
#> 1 1 2
#> 2 2 3
#> 3 3 4
LG,
Bernhard
Nachtrag: Ok, da muss man erstmal drauf kommen: Diese Syntax ist völlig in Ordnung für "richtige" data.frames, aber sie funktioniert nicht mit data.tables:
Code: Alles auswählen
library(data.table)
bsp <- data.table(X = 1:3,
Y = 2:4,
Z = 3:5)
bsp[c("X", "Y")]
#> Error in `[.data.table`(bsp, c("X", "Y")): When i is a data.table (or character vector), the columns to join by must be specified using 'on=' argument (see ?data.table), by keying x (i.e. sorted, and, marked as sorted, see ?setkey), or by sharing column names between x and i (i.e., a natural join). Keyed joins might have further speed benefits on very large data due to x being sorted in RAM.
Code: Alles auswählen
data <- as.data.frame(data)
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Net Squared Displacement
Hallo Bernhard,
Fehler in `[.data.frame`(data, c("X", "Y")) :
nicht definierte Spalten gewählt
Bei einem reproduzierbaren Beispiel mit entsprechenden Daten könnte man wirklich konkret antworten.
Gruß, Jörg
das war nun wieder mein ursprünglicher Gedanke, da Arthemisia gelegentlich mit data.table arbeitet. Aber dort steht ja in der Fehlermeldung:
Fehler in `[.data.frame`(data, c("X", "Y")) :
nicht definierte Spalten gewählt
Bei einem reproduzierbaren Beispiel mit entsprechenden Daten könnte man wirklich konkret antworten.
Gruß, Jörg
-
- Beiträge: 17
- Registriert: Fr Aug 26, 2022 2:47 pm
Re: Net Squared Displacement
Ich nehme an, es soll ein neues Data Frame erzeugt werden, mit den Spalten X und Y, und in die Zeilen soll dann jeweils nach jedem Durchlauf der For-Schleife das Ergebnis eingetragen werden.
Das würde Sinn machen, da für jedes Tier einzeln die Migrationsbewegungen im Jahresverlauf kumuliert aufgetragen werden sollen, auf der x-Achse die Monate, auf der y-Achse die Entfernung. Es gibt vorher auch noch keinen data Frame, der im Original-Skript mit "data" oder "data.xy" benannt worden ist.
Das würde Sinn machen, da für jedes Tier einzeln die Migrationsbewegungen im Jahresverlauf kumuliert aufgetragen werden sollen, auf der x-Achse die Monate, auf der y-Achse die Entfernung. Es gibt vorher auch noch keinen data Frame, der im Original-Skript mit "data" oder "data.xy" benannt worden ist.