在我的R脚本assign1.R
中有以下几行代码:
(u <- c(1, 1, 0, 1, 0)) # a)
u[3] # b)
ones_u <- which(u == 1) # c)
ones_u
source("assign1.R")
只是source()
函数不起作用。R显示以下错误消息:
Error in match(x, table, nomatch = 0L) : node stack overflow
Error during wrapup: node stack overflow
出了什么问题?
3条答案
按热度按时间62lalag41#
我没有得到和你完全一样的错误,但是我可以用一个简单的例子得到类似的东西:
正如上面的一条评论所述,您正在查找的文件正在尝试
source()
本身。这就是你如何在R中测试这种可能性,而不仅仅是在文本编辑器中打开文件(这是一种更明智的方法):
(显然你应该在这里填写你的作业文件的名称……)
感觉你自己应该注意到这一点,但我还是回答了,因为问题是delightfully recursive……
piwo6bdm2#
您正在查找您所在的文件的源。该源()行代码应该被删除。如果你从另一个R文件中获取一些代码,那么你应该使用源代码()函数,否则不需要源另一个文件。此外,如果所有代码在一个文件中工作,而不运行其他文件中的其他代码位,很可能你已经有了你需要的代码,你不需要再去源另一个文件。
zwghvu4y3#
当我运行
source("myfile.R")
时,我遇到了同样的"node stack overflow"
错误,我花了几个小时才弄清楚是什么导致了它,最终我能够通过消除来做到这一点(逐行消除我在“myfile.R”中的代码)这就是我的发现:
事实上(正如这个问题的其他答案所指出的那样)还有另一行
source ("myfile.R")
,但是我在FALSE if语句中有,如下所示:所以,很明显,即使它在
if
语句的FALSE部分,当我从rmarkdown编译代码时,它仍然试图访问FALSE部分中的代码!-导致无限调用和错误消息。一旦我删除了这一行(实际上使用
#
取消注解,错误就消失了)。我倾向于相信这可能是knitr,rmarkdown或flexdashboard的错误-他们首先从所有源文件组装代码,然后执行代码的实际执行(如运行if
语句)为了完整起见,我从rmarkdown文件中获取了myfile.R:
x一个一个一个一个x一个一个二个x
sessionInfo()R版本4.2.2(2022-10-31 ucrt)平台:x86_64-w 64-mingw 32/x64(64位)运行环境:Windows 10 x64(内部版本号19044)
基质产品:默认值
locale:[1] LC_COLLATE=English_Canada.utf8 [2] LC_CTYPE=English_Canada.utf8
[3]LC_MONETARY=English_Canada.utf8 [4] LC_NUMERIC=C
[5]LC_TIME=加拿大英语. utf8
随附基础 Package :[1]统计图形grDevices utils datasets methods
[7]基底
其他随附 Package :[1] flexdashboard_0.6.1 DBI_1.1.3 shinyBS_0.61.1
[4]shinybusy_0.3.1 shiny_1.7.3 readxl_1.4.1
[7]glue_1.6.2 R6_2.5.1,适用于cats_0.5.2
[10]stringr_1.4.1 DT_0.27 plotly_4.10.1
[13]data.table_1.14.6 lubridate_1.9.0 timechange_0.1.1
[16]ggplot2_3.4.0 magrittr_2.0.3