我正在使用以下代码和数据:
> d <- data.frame(year = rep(2000:2002, each = 3), count = round(runif(9, 0, 20)))
> d
year count
1 2000 1
2 2000 4
3 2000 4
4 2001 14
5 2001 8
6 2001 15
7 2002 10
8 2002 14
9 2002 20
>
> with(d, ave(count, year, sum))
Error in unique.default(x) : unique() applies only to vectors
我试过了:
> with(d, ave(count, list(year), sum))
Error in unique.default(x) : unique() applies only to vectors
> with(d, ave(count, list('year'), sum))
Error in unique.default(x) : unique() applies only to vectors
>
> with(d, ave(count, 'year', sum))
Error in unique.default(x) : unique() applies only to vectors
> with(d, ave('count', 'year', sum))
Error in unique.default(x) : unique() applies only to vectors
> ave(d$count, d$year, sum)
Error in unique.default(x) : unique() applies only to vectors
> ave(d$count, factor(d$year), sum)
Error in unique.default(x) : unique() applies only to vectors
> ave(d$count, unique(d$year), sum)
Error in unique.default(x) : unique() applies only to vectors
> ave(d$count, factor(unique(d$year)), sum)
Error in unique.default(x) : unique() applies only to vectors
> ave(d$count, as.factor(unique(d$year)), sum)
Error in unique.default(x) : unique() applies only to vectors
以下作品:
> unique(d$count)
[1] 1 4 14 8 15 10 20
> unique(d$year)
[1] 2000 2001 2002
tapply,聚合和工作:
> with(d, tapply(count, year, mean))
2000 2001 2002
3.00000 12.33333 14.66667
> with(d, aggregate(count, list(year), mean))
Group.1 x
1 2000 3.00000
2 2001 12.33333
3 2002 14.66667
> with(d, by(count, year, mean))
year: 2000
[1] 3
-------------------------------------------------------------------------------------------------
year: 2001
[1] 12.33333
-------------------------------------------------------------------------------------------------
year: 2002
[1] 14.66667
为什么会出现错误&#39; unique()仅适用于向量&#39;以及如何在这里使用ave功能?
答案 0 :(得分:5)
这有点微妙,我认为最好的文档实际上是argument matching上的R语言定义:
功能评估中首先发生的是匹配 正式的实际或提供的论点。这是由a完成的 三通过程:
标签上的完全匹配。对于每个命名提供的参数列表 搜索形式参数以查找名称完全匹配的项目。 使相同的形式参数匹配几个实际值是错误的 或相反亦然。
标签上的部分匹配。每个剩余的名称提供 将参数与使用partial的剩余正式参数进行比较 匹配。如果提供的参数的名称与之完全匹配 正式论证的第一部分然后是两个论点 被认为是匹配的。有多个部分是错误的 火柴。请注意,如果f&lt; - function(fumble,fooey)fbody,则f(f = 1,fo = 2)是非法的,即使只是第二个实际论点 匹配fooey。 f(f = 1,fooey = 2)从第二个开始是合法的 参数完全匹配,并从部分考虑中删除 匹配。如果形式参数包含'...',那么部分匹配 仅适用于它之前的参数。
- 醇>
位置匹配。任何 无法匹配的形式参数绑定到未命名的提供参数,在 订购。如果有一个'...'参数,它将占用剩余的 参数,标记与否。
所以这是…
参数的特殊性质的结果。从某种意义上说,它是&#34;贪婪的&#34;,除非你更明确并使用命名参数。这不会在其他地方弹出的原因是因为…
通常是最后(或接近最后)的参数,因此在使用位置匹配时,您通常不会遇到这种混乱的行为。