来自书" R in action"第146页它有一个由
组成的描述性统计数据的例子vars <- c("mpg", "hp", "wt")
...
> dstats <- function(x)(c(mean=mean(x), sd=sd(x)))
> by(mtcars[vars], mtcars$am, dstats)
但是当我把它输入到R中时我得到的是
> Error in is.data.frame(x) :
>(list) object cannot be coerced to type 'double'
>In addition: Warning message:
>In mean.default(x) : argument is not numeric or logical: returning NA
我不知道这里发生了什么。任何人都可以给我一个帮助。感谢。
答案 0 :(得分:0)
请在R控制台中执行?by()
。
在帮助中,您会找到FUN
by(data, INDICES, FUN, ..., simplify = TRUE)
FUN a function to be applied to (usually data-frame) subsets of data.
<强>更新强>
这可能更多地与定义mean()和sd()的方式有关。它们都支持向量,而不是数据帧。
查看下面的示例,看看mean()
带有和不带Vectorize()
的差异:
x <- data.frame( a = c(1, 2, 4), b = c(1, 2, 4))
现在,如果你这样做:
by(x, 1:3, mean)
您将收到以下错误:
Warning messages:
1: In mean.default(data[x, , drop = FALSE], ...) :
argument is not numeric or logical: returning NA
2: In mean.default(data[x, , drop = FALSE], ...) :
argument is not numeric or logical: returning NA
3: In mean.default(data[x, , drop = FALSE], ...) :
argument is not numeric or logical: returning NA
但是在添加Vectorize()
时:
by(x, 1:3, Vectorize(mean))
1:3: 1
a b
1 1
-------------------------------------------------------
1:3: 2
a b
2 2
-------------------------------------------------------
1:3: 3
a b
4 4
同样来自论坛:
by(as.data.frame(mtcars [vars]),mtcars $ am,dstats)
问题在于by功能。如果用平均值替换dstats 或者SD,它仍然不起作用。它只适用于摘要 功能。我想知道作者如何得到书中的输出?