使用$运算符
问题描述:
我的问题是关于$运算符来访问我的数据框的特定部分。
这下面是我的数据帧
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")
我可以使用
Unt$richness
[1] 36 37 39 31 31 24
但是,如果我想要做的方差分析测试,我得到一个错误信息说我不能使用$与原子矢量
Unt_Richness_anova <- aov(Unt$richness, TreatmentDay)
所以,我觉得很困惑我可以在一个实例中使用原子向量中的$运算符,但不是另一个。 有人可以帮忙吗?
答
从查看aov()
函数的源代码,它实际上是调用另一个函数terms()
导致此错误。
现在,如果当aov()
函数中没有指定数据帧的terms()
函数被调用,似乎terms()
功能只需要其从aov()
函数传递一个公式风格的说法。
请注意,下面的代码无法正常工作(如指定):
Unt_Richness_anova <- aov(Unt$richness, Unt$TreatmentDay)
如果您表示两个变量的公式,然后一切正常,因为它应该:
Unt_Richness_anova <- aov(Unt$richness ~ Unt$TreatmentDay)
所以问题不在于$
运营商,而是与terms()
功能。看起来terms()
函数只能处理单独的变量,如果它们属于同一个数据帧和在aov()
函数中指定数据帧。
为什么这是我无法回答的情况,但希望别人可以解决一些问题?
这是什么语言?你的问题需要更多的**标签**。 “运营商”本身太泛泛。 –
data.frame是一种特殊类型的列表。你可以用'is.list(Unt)'来看这个。一个列表特别不是一个原子向量。你可以用'is.atomic(Unt)'来看这个。 'Unt $ richness',存储在data.frame中的矢量是原子的,'is.atomic(Unt $ richness)'。 – lmo