[英]R Markdown struggling with read_xlsx, Warning: Expecting logical
在我的普通 .R 腳本中運行read_xlsx()
時,我能夠讀取數據。 但是,當在 R Markdown 中使用source()
運行 .R 腳本時,突然需要很長時間(> 20+++ 分鍾,我總是在結束前終止)並且我不斷收到這些警告消息,它正在評估每一列和期望它是合乎邏輯的:
Warning: Expecting logical in DE5073 / R5073C109: got 'HOSPITAL/CLINIC'
Warning: Expecting logical in DG5073 / R5073C111: got 'YES'
Warning: Expecting logical in CQ5074 / R5074C95: got '0'
Warning: Expecting logical in CR5074 / R5074C96: got 'MARKET/GROCERY STORE'
Warning: Expecting logical in CT5074 / R5074C98: got 'NO'
Warning: Expecting logical in CU5074 / R5074C99: got 'YES'
Warning: Expecting logical in CV5074 / R5074C100: got 'Less than one week'
Warning: Expecting logical in CW5074 / R5074C101: got 'NEXT'
Warning: Expecting logical in CX5074 / R5074C102: got '0'
.. etc
我不能在這里分享數據,但它只是一個普通的 xlsx 文件(30k obs,110 vars)。 數據在所有大寫字母中都有響應,例如 YES 和 NO。 原始數據應用了過濾器、一些額外的工作表和 Excel 中的一些溫和格式(無邊框、白色填充),但我認為這些不會影響它。
我的工作流程設置示例如下:
數據准備.R:
setwd()
pacman::p_load() # all my packages
df <- read_xlsx("./data/Data.xlsx") %>% type_convert()
## blabla more cleaning stuff
報告.Rmd:
setwd()
pacman::p_load() # all my packages again
source("Dataprep.R")
當我運行Dataprep.R
時,一切都在 < 1 分鍾內運行。 但是,當我嘗試從Report.Rmd
獲取source("Dataprep.R")
時,它在read_xlsx()
處開始變慢並給我這些警告。
我也嘗試從Dataprep.R
獲取df <- read_xlsx()
並將其移動到Report.Rmd
,它仍然與運行source()
一樣慢。 我還刪除type_convert()
並嘗試了其他方法,例如刪除 Excel 中的額外工作表。 source()
也在Report.Rmd
的設置塊中,但我把它拿出來還是一樣。
所以我認為這與 R Markdown 和readxl/read_xlsx()
。 完全相同的代碼和數據在 R 與 Rmd 中的評估結果如此不同,這非常令人費解。
對此有任何見解。 有解決辦法嗎? 或者這是我必須忍受的東西(即轉換為 csv)?
> sessionInfo()
R version 4.2.0 (2022-04-22 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 22000)
Matrix products: default
locale:
[1] LC_COLLATE=English_United Kingdom.utf8 LC_CTYPE=English_United Kingdom.utf8 LC_MONETARY=English_United Kingdom.utf8
[4] LC_NUMERIC=C LC_TIME=English_United Kingdom.utf8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] digest_0.6.29 R6_2.5.1 lifecycle_1.0.1 pacman_0.5.1 evaluate_0.15 scales_1.2.0 rlang_1.0.2 cli_3.3.0 rstudioapi_0.13
[10] rmarkdown_2.14 tools_4.2.0 munsell_0.5.0 xfun_0.30 yaml_2.3.5 fastmap_1.1.0 compiler_4.2.0 colorspace_2.0-3 htmltools_0.5.2
[19] knitr_1.39
更新:
所以在 Markdown 中,我可以使用更通用的read_excel()
並且在我的設置塊中工作。 但是,如果我嘗試source()
它,我仍然會收到相同的Warning
消息,即使來源的 R 腳本也使用read_excel()
而不是read_xlsx()
。 周圍非常令人費解。
當您在 .R(以及可能生成警告的其他類型的代碼)上運行該代碼時,您將獲得警告摘要。 類似於“有 50 個或更多警告(使用 warning() 查看前 50 個)”之類的內容。
而如果您在標准 Rmarkdown 代碼塊上運行相同的代碼,您實際上會收到全部 50 多個警告。 這可能意味着您正在打印數千、數百萬或更多警告。
如果您的問題是為什么會在 Rmarkdown 而不是 R 上發生這種情況,我不確定。
但是,如果您的問題是如何解決它,那很簡單。 只需確保將選項 message=FALSE 和 warning=FALSE 添加到您的代碼塊中。
它應該看起來像這樣:
{r chunk_name, message=FALSE, warning=FALSE}
setwd()
pacman::p_load() # all my packages again
source("Dataprep.R")
現在,關於“setwd()”,我建議不要使用任何改變系統狀態的東西(避免“副作用”功能)。 如果您不是很小心,它們可能會產生問題。 但這是另一天的另一個話題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.