为啥 summary(object) 有效但 plot(object) 无效?

Posted

技术标签:

【中文标题】为啥 summary(object) 有效但 plot(object) 无效?【英文标题】:Why does summary(object) work but plot(object) not?为什么 summary(object) 有效但 plot(object) 无效? 【发布时间】:2017-07-04 12:28:37 【问题描述】:

我通过 read.table() 创建了一个数据集“before_database”。之后这个数据框被 do.call() 分组并存储到一个对象“fits”中:

fits<-do.call('rbind', by(before_database, before_database$Serial_number, function(before_database) broom::tidy(lm(Amplification ~ Voltage-1, data = before_database))))

现在我想看到一些结果。摘要(适合)作品:

> summary(fits)
     term              estimate        std.error         statistic        p.value         
 Length:54          Min.   :0.3601   Min.   :0.06611   Min.   :2.884   Min.   :3.000e-09  
 Class :character   1st Qu.:0.4943   1st Qu.:0.11113   1st Qu.:3.384   1st Qu.:4.344e-05  
 Mode  :character   Median :0.5866   Median :0.14816   Median :3.934   Median :2.015e-04  
                    Mean   :0.6030   Mean   :0.16049   Mean   :4.026   Mean   :8.918e-04  
                    3rd Qu.:0.7058   3rd Qu.:0.21271   3rd Qu.:4.318   3rd Qu.:1.199e-03  
                    Max.   :0.9193   Max.   :0.27495   Max.   :6.410   Max.   :5.291e-03  
> 

但情节(适合)不。我收到:

> plot(fits)
Error in plot.window(...) : need finite 'xlim' values
In addition: Warning messages:
1: In data.matrix(x) : NAs introduced by coercion
2: In min(x) : no non-missing arguments to min; returning Inf
3: In max(x) : no non-missing arguments to max; returning -Inf

coef(fits) 似乎也不起作用,我只是得到“NULL”。什么事?我应该追求什么?

编辑:添加了摘要信息,我还有一个问题,可能与问题有关。我想分别拟合所有分组数据(我现在正在这样做吗?)所以通过尝试绘制它并没有指定应该精确绘制什么(哪个子集)?

我想我的问题可以归结为我不知道如何将常规 r 命令应用于通过 do.call() 生成的分组数据/子集的情况?最后,我需要一个不合适的特定值。我知道fitted() 可以做到这一点,但现在如何为每个组做?例如。我需要150倍放大对应的电压和此时的斜率。

数据(仅显示一部分):

由 do.call() 分组和拟合(仅显示一部分):

【问题讨论】:

我们可以看到汇总的结果吗? @CClaire 当然,对不起! 【参考方案1】:

第二个问题(来自编辑)没有关联,所以我将专注于第一个问题。您收到错误消息,因为您正在尝试绘制一个不起作用的 character() 类。一般来说,无论如何尝试调用plot 整个数据框都不是最好的主意-您可能希望将一些特定的列相互绘制,对吗? plot 虽然有点聪明,但它通常会尝试绘制 something。这是一个可重现的示例:

plot(data.frame(letters[1:10], 1:10, stringsAsFactors = F))   # error
plot(data.frame(1:10, sample(1:10,10), stringsAsFactors = F)) # sees two columns, makes a scatterplot
plot(data.frame(1:10, sample(1:10,10), sample(1:10,10), stringsAsFactors = F)) # sees 2+ columns, makes a scatterplot matrix
plot(data.frame(letters[1:5], 1:10, stringsAsFactors = T)) # if using factors (not character), plot wrangles data into a boxplot (recycling values!)
boxplot(data.frame(runif(10), runif(10)*2, runif(10)^2 )) # what I suspect you were after

简而言之,最好先弄清楚你想要绘制什么,然后再绘制它。

编辑以回复评论/编辑。要设置子集,您可以只限制绘图边界

plot(sample(1:100, 100), ylim=c(0,50), xlim=c(2,10))

或使用逻辑运算符做一个子集,例如,

x = 1:10
x2 = x[which(x>5 & x < 10)]
plot(x2)

【讨论】:

谢谢!不完全是我现在需要的,而是以后无论如何:) 我的目标是绘制我通过 do.call() 创建的任意拟合分组/子集。或者主要是:如何将常规 r 命令应用于通过 do.call() 生成的子集? @Ben 弄清楚你所说的“情节”是什么意思(箱线图、散点图、条形图、文字云...),并相应地改写问题。此外,do.call 不会生成任何特殊对象(请查看 class())。 首先再次感谢!对于数据 mtcars,当我执行 lmfit @Ben 如果我的回答回答了您最初的问题,您可能希望将其标记为已接受,然后通过提出单独的问题来充实您的其他问题。 @Ben 执行以下 R 命令:?"==" 并使用合适的运算符。

以上是关于为啥 summary(object) 有效但 plot(object) 无效?的主要内容,如果未能解决你的问题,请参考以下文章

困惑为啥在Objective C中一段代码有效而另一段代码无效

为啥我在使用 PL/SQL 的 Oauth 2 访问令牌代码中出现此错误?

“Object [object Object] has no method”错误在线但不在本地主机上!为啥?

为啥方法 getNodeSuccess 有效,但 getNodeFail 无效?

为啥 VS Code 认为导入有效但 WebPack 不认为有效?

为啥 Range 有效,但 Cells 无效?