仅在R中偶尔发出警告消息的代码

仅在R中偶尔发出警告消息的代码,r,debugging,dataframe,warnings,R,Debugging,Dataframe,Warnings,我在R中遇到了一个非常奇怪的问题。我正在尝试使用某个面板data.frame运行plm。如果我运行模型,有时会有警告,有时没有。这怎么可能?如果我键入class(mydf),完全一样,只是有时会发出警告。 有人知道这是怎么回事吗 class(mydf) [1] "data.frame" Warning messages: 1: In if (is.na(le)) { : the condition has length > 1 and only the first element wi

我在R中遇到了一个非常奇怪的问题。我正在尝试使用某个面板
data.frame
运行
plm
。如果我运行模型,有时会有警告,有时没有。这怎么可能?如果我键入
class(mydf)
,完全一样,只是有时会发出警告。 有人知道这是怎么回事吗

class(mydf)
[1] "data.frame"
Warning messages:
1: In if (is.na(le)) { :
  the condition has length > 1 and only the first element will be used
2: In if (is.na(le)) " __no length(.)__ " else if (give.length) { :
  the condition has length > 1 and only the first element will be used
3: In if (le > 0) paste0("[1:", paste(le), "]") else "(0)" :
  the condition has length > 1 and only the first element will be used
class(mydf)
[1] "data.frame"

我认为引用的页面根本无法解释为什么会发生这种情况。某处有一只虫子。应追踪代码并修复违规行:

if (is.na(le)) " __no length(.)__ " else if (give.length) { 
。。。。应改为:

if ( all(is.na(le)) ) " __no length(.)__ " else if (give.length) { 

我同意Paul的观点,即您应该使其可复制。

这是因为
str
检查其对象和某些对象的长度,例如
公式
包中的扩展公式没有单一长度。特别是,
Formula:::length.Formula
返回一个向量而不是一个数字,这会导致警告。虽然您自己可能不会调用
str
,但您的IDE(比如RStudio)可能会使用它来显示工作区中对象的对象结构。

这是在标准的R GUI中吗?斯图迪奥?终点站?所有对象或仅此特定数据。帧?您需要使您的问题重现,我们现在和您一样迷失。有一个答案,它可以通过
数据(“Produc”,package=“plm”)
重现数据打印时,请查看第419行,可能是Windows特定的R错误或旧R错误?当我执行时:`data(“Produc”,package=“plm”);class(Produc)`我没有收到任何警告。这个函数去年被完全重写了。我想我可能已经发现了问题所在。或者至少知道它发生在哪里,所以海报(或者你?)使用的是过时的版本?