运行代码块时RStudio中的奇怪行为

时间:2017-06-06 20:09:39

标签: r rstudio

更新:我也在https://support.rstudio.com/hc/en-us/community/posts/115008117828-Strange-behavior-when-running-code-as-chunk的RStudio IDE论坛上发布了此消息。 RStudio团队已经复制了该bug并提交了一份错误报告。如果我在这个问题上听到RStudio团队的更多信息,我会再次更新。

我在RStudio中遇到过一个奇怪的行为,我在Ubuntu 16.04 LTS版本的0.99.903和1.0.143版本中找到了这种行为,尽管我还没有测试过早期版本或其他操作系统。在Linux命令行运行时,它不会出现在R中。基本上,如果自定义函数在同一代码块中运行两次,则第二次运行时,第一次调用dir()会正常工作,但第二次调用不会,但它只会返回NAs。它发生在一个奇怪的条件组合中,包括以下内容:

1)该函数调用“dir()”或“list.files()”两次

2)正在读取的目录包含超过3100个文件

3)该功能包括对“plot()”的调用

4)在同一代码块中调用该函数两次

我在下面列出了一个可重现的例子。我很感激帮助确定为什么会发生这种情况以及如何避免它。请记住,如果您运行代码并希望重新运行它,则需要删除在第一步中创建的目录或至少删除其中的文件以重现有问题的行为。谢谢。

# Create a directory
dir.create(path = "~/test.2017-06-06")

# Define function.  This reads the files in the directory
# twice, each time storing the result in a different vector.
# Then it prints the length of each vector and the first 
# 3 files in them. 
Function = function() {
  fileNames1 = dir(path = "~/test.2017-06-06",  
                   full.names = T)
  fileNames2 = dir(path = "~/test.2017-06-06", 
                   full.names = T)
  cat("length(fileNames1):", length(fileNames1), ",", fileNames1[1:3], "\n")
  cat("length(fileNames2):", length(fileNames2), ",", fileNames2[1:3], "\n")
  plot(1)
}

# Write 3100 files containing NULL to the new directory
fileNames = paste0("~/test.2017-06-06/file", 1:3100, ".txt")
for(i in fileNames) write(x = NULL, file = i)

# Call the function twice (this works)
Function()
Function()

# Write 3200 files to the directory 
fileNames = paste0("~/test.2017-06-06/file", 1:3200, ".txt")
for(i in fileNames) write(x = NULL, file = i)

# Call the function twice again (this doesn't work)
Function()
Function()

0 个答案:

没有答案