R版本2.14.1平台:i386-apple-darwin9.8.0 / i386(32位)
目的:
使用库dens()
的函数lessR
绘制正态密度曲线和叠加在直方图上的一般密度曲线。
问题:
使用例如生成数据时rnorm()
或rbinom()
效果很好,在sample()
生成的数据上运行会返回此错误:
Error in if (from == to) rep.int(from, length.out) else as.vector(c(from, :
argument is of length zero
MWE:
library(lessR)
data <- data.frame(col=sample(20))
y <- data$col
dens(y)
问题:
导致问题的原因以及如果我想要一个包含单个列的数据框,我需要做什么,让我们说,它将包含由sample()
函数生成的20行值并将它们用作输入对于dens()
?
更新(2012-11-17):
我已将R更新为版本2.15.2并将lessR
更新为版本2.6(两者都是最新版本)。
使用@Roland提供的数据,错误现在是:
Error in seq.default(x.min, x.max, length = 200) :
'from' must be of length 1
我可以理解为什么会发生这种情况并允许sample()
使用多个单个值导致正确的结果。
答案 0 :(得分:3)
是的,作为lessR的开发者,我发现了这个bug。发生的事情是我有一个&gt;和&lt;密度图居中的条件,但没有=条件。这个=条件是从对样本(20)的调用触发的,因为结果是从1到20的连续整数。显然是一个有效的集合,但是在我的代码中触发了=条件和我以前没有测试过的条件。更改&gt; to&gt; =修复了错误。当我在12月10日左右上传下一个版本时,修复将在CRAN上。维护人员不鼓励频繁更新CRAN,所以我需要等到12月更新。
目前,如果您希望使用示例获得密度图,请运行以下R代码。
y <- sample(20)
dy <- density(y)
plot(dy)
此外,当我大约4年前开始这个项目时,我没有计划用大约43种不同的功能来生成系统的数据分析系统。因此,我的函数初始命名方案并没有很好地概括,因为系统只是从几个函数发展而来,所以我逐渐发展了一个将来不会改变的系统。每个函数可以通过其全名来引用,例如Density,或者现在通过通常的两个字符缩写,在这种情况下为dn。为了一致起见,我决定将缩写设为两个字符,这也是小写字母。目标是生成标准数据分析程序,如直方图或hs,ScatterPlot或sp,BoxPlot或bx,只需很少的工作,并为图形提供颜色主题。默认颜色主题为蓝色,但可以使用设置功能轻松更改。
答案 1 :(得分:2)
当前版本的lessR
似乎不再提供函数dens
,而是有一个函数Density
。
您会考虑更新您的R版本和套餐吗?你为什么使用32位版本的R?在Mac上,您应该能够使用64位版本。
我查看了dens
中的lessR_2.1.1
函数。我无法重现您的错误(因为您没有使用set.seed
来使您的代码可重现)。取而代之的是Error in seq(min.x, max.x, length = 200) : Object 'min.x' not found
与y <- c(3, 4, 8, 1, 6, 14, 20, 5, 13, 17, 19, 10, 2, 12, 7, 9, 18, 11, 15, 16)
。
以下是功能代码的摘录:
d.gen <- suppressWarnings(density(x, bw, ...))
mx <- mean(x)
# min and max x coordinates for graph, make symmetric
min.dev.x <- min(d.gen$x) - mx
max.dev.x <- max(d.gen$x) - mx
if (abs(min.dev.x) > abs(max.dev.x)) {
min.x <- min(d.gen$x)
max.x <- mx + abs(min.dev.x)
}
if (abs(max.dev.x) > abs(min.dev.x)) {
min.x <- mx - abs(max.dev.x)
max.x <- max(d.gen$x)
}
请注意,代码未定义min.x
和max.x
,如果abs(min.dev.x) == abs(max.dev.x)
,则为错误。当然,通过将第二个if条件更改为if (abs(max.dev.x) >= abs(min.dev.x)) {
可以轻松解决这个问题。
可能存在其他错误,但是不值得从实用程序包的存档版本修复函数。当然,我在新的Density
函数中遇到了类似的错误,实际上它包含了相同的错误。