2017-07-04 6 views
1

Meine Frage bezieht sich auf den Operator $ für den Zugriff auf einen bestimmten Teil meines Datenrahmens.

Hier unten ist mein Datenrahmen

structure(list(Treatment = structure(c(11L, 11L, 11L, 11L, 11L, 
11L), .Label = c("Chlora", "Gen", "Lin", "Metro", "Metro+Pen", 
"Metro+Rif", "Metro+Rif+Pen", "Pen", "Pen+Rif", "Rif", "Untreated" 
), class = "factor"), CDW = c(0.833, 0.867, 0.833, 2.7, 3.3, 
3.133), Chlorophyll = c(1.098, 1.376, 1.64, 34.714, 37.773, 40.54 
), EPS = c(0.092, 0.067, 0.092, 0.571, 0.591, 0.597), Day = c(0L, 
0L, 0L, 10L, 10L, 10L), TreatmentDay = structure(c(21L, 21L, 
21L, 22L, 22L, 22L), .Label = c("Chlora0", "Chlora10", "Gen0", 
"Gen10", "Lin0", "Lin10", "Metro+Pen0", "Metro+Pen10", "Metro+Rif+Pen0", 
"Metro+Rif+Pen10", "Metro+Rif0", "Metro+Rif10", "Metro0", "Metro10", 
"Pen+Rif0", "Pen+Rif10", "Pen0", "Pen10", "Rif0", "Rif10", "Untreated0", 
"Untreated10"), class = "factor"), richness = c(36L, 37L, 39L, 
31L, 31L, 24L), shannon = c(3.35867443756547, 3.37354007038303, 
3.43640985397324, 3.16018680691703, 3.15718684762791, 2.85288614815093 
)), .Names = c("Treatment", "CDW", "Chlorophyll", "EPS", "Day", 
"TreatmentDay", "richness", "shannon"), row.names = c("Day0F1", 
"Day0F2", "Day0F3", "Day10F1", "Day10F2", "Day10F3"), class = "data.frame") 

I

Unt$richness 
[1] 36 37 39 31 31 24 

kann aber, wenn ich einen ANOVA-Test machen will, bekomme ich eine Fehlermeldung sagen, dass ich nicht mehr als $ mit atomaren Vektoren kann

Also, ich finde es verwirrend ich kann $ Operator in atomaren Vektor in einer Instanz, aber nicht für fo verwenden r der andere. Kann jemand aushelfen?

+1

Welche Sprache ist das? Ihre Frage benötigt mehr ** Tags **. "Betreiber" allein ist zu allgemein. –

+0

Ein data.frame ist eine spezielle Art von Liste. Sie können dies mit 'is.list (Unt)' sehen. Eine Liste ist speziell NICHT ein atomarer Vektor. Sie können dies mit 'isatomic (Unt)' sehen. 'Unt $ fillness', der im data.frame gespeicherte Vektor ist atomar,' isatomic (Unt $ fillness) '. – lmo

Antwort

0

Aus dem Blick auf den Quellcode der aov()-Funktion ist es tatsächlich ein Aufruf an eine andere Funktion namens terms(), die diesen Fehler verursacht.

Wenn nun die terms() Funktion aufgerufen wird, wenn sie der Datenrahmen nicht innerhalb der Funktion aov() angegeben, so scheint es, dass die terms() Funktion nur ein Formeln Stil Argument nehmen, die von der aov() Funktion übergeben wird.

Beachten Sie, dass der folgende Code funktioniert nicht (wie angegeben):

Unt_Richness_anova <- aov(Unt$richness, Unt$TreatmentDay) 

Wenn Sie die beiden Variablen ausdrücken als eine Formel, dann funktioniert alles, wie es sollte:

Unt_Richness_anova <- aov(Unt$richness ~ Unt$TreatmentDay) 

So ist die Problem ist nicht mit dem $ Operator, sondern tatsächlich mit der terms() Funktion. Es scheint, dass die terms()-Funktion nur mit separaten Variablen umgehen kann, wenn sie zum selben Datenrahmen gehören. AND der Datenrahmen ist innerhalb der aov()-Funktion spezifiziert.

Warum dies der Fall ist, kann ich nicht beantworten, aber hoffentlich kann jemand anderes etwas Licht abwerfen?

Verwandte Themen