使用Formula()或as.Formula()來自公式包時,我收到一條警告訊息。它似乎不會影響功能,但我無法理解它的來源。
我正在使用Formula包來更新多部分公式(ivreg()在AER包中,但這與問題無關)。在物件上使用Formula()或之后,我運行的下一行代碼會產生警告訊息。我已經閱讀了檔案和GitHub 存盤庫,但無法理解它的來源。as.Formula()formula
library(Formula)
f1 <- y ~ x1 x2 | z1 z2 z3
F1 <- Formula(f1)
class(F1)
> class(F1)
[1] "Formula" "formula"
Warning message:
In is.name(callee) && length(object) > 20 :
'length(x) = 2 > 1' in coercion to 'logical(1)'
需要明確的是,它并不是class(F1)專門產生此警告的。例如:
> F1 <- Formula(f1)
> print("lol")
[1] "lol"
Warning message:
In is.name(callee) && length(object) > 20 :
'length(x) = 2 > 1' in coercion to 'logical(1)'
我已經給包作者發了電子郵件。
該問題似乎與其他軟體包無關:
> (.packages())
[1] "stats" "graphics" "grDevices" "utils" "datasets" "methods" "base"
但是,警告訊息不會在 RGui 中重現,因此它可能與 RStudio(?)
uj5u.com熱心網友回復:
通過以下方式觸發警告:在 RStudio 中創建物件時,觸發.rs.describeObject()函式 fromtools:rstudio以獲取有關物件的資訊。除其他外,它使用.rs.sanitizeCall()包含以下行的函式:
long <- is.name(callee) && length(object) > 20
因此,這假設length()回傳單個數字,不幸的是,Formula()物件并非如此:
f <- Formula(y ~ x | z)
length(f)
## [1] 1 2
因此,該Formula程式包無法采取任何措施來避免警告 - 除了破壞其length()已經存在了近 1.5 年的方法的行為。
length()事后看來,使該方法以這種方式運行可能不是最佳決定。這甚至使它成為?length基礎 R 中的官方檔案:
警告:
包作者已經撰寫了回傳長度不是一的結果(“公式”)并回傳“雙”型別的向量(“矩陣”)的方法,即使是非整數值(“集合”的早期版本)。如果回傳可以表示為整數的單個雙精度值,則回傳長度為 1 的整數向量。
避免此問題的一種方法是使用
`length(object)[1L] > 20`
或者
`any(length(object) > 20)`
在.rs.sanitizeCall(). 我建議將此報告給 RStudio 開發人員。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/527699.html
標籤:r工作室警告
上一篇:從多個資料框中洗掉例外值
