&引用;“临时名称太长”;使用Rnotebook时意外出现的错误

&引用;“临时名称太长”;使用Rnotebook时意外出现的错误,r,rnotebook,R,Rnotebook,在使用rnotebook时,通过broom获取线性回归模型的输出时,我会遇到以下错误 这是我遇到的一个虚拟示例: N <- 100 a <- rnorm(N) b <- a + rnorm(N) df1 <- data.frame(a, b) lModel <- lm(b ~ a, df1) summary(lModel) 先谢谢你 当目录嵌套在Windows系统中的级别太多时,会发生此错误。这个 最大路径长度限制 在Windows API中(以下段落

在使用rnotebook时,通过broom获取线性回归模型的输出时,我会遇到以下错误

这是我遇到的一个虚拟示例:

    N <- 100
a <- rnorm(N)
b <- a + rnorm(N)
df1 <- data.frame(a, b)

lModel <- lm(b ~ a, df1)

summary(lModel)

先谢谢你

当目录嵌套在Windows系统中的级别太多时,会发生此错误。这个

最大路径长度限制 在Windows API中(以下段落讨论了一些例外情况),路径的最大长度是MAX_path,定义为260个字符。本地路径按以下顺序构造:驱动器号、冒号、反斜杠、由反斜杠分隔的名称组件和终止的空字符。例如,驱动器D上的最大路径为“D:\256个字符的路径字符串”,其中“”表示当前系统代码页的不可见终止空字符。(此处使用的字符<>是为了清晰可见,不能作为有效路径字符串的一部分。)


这很容易避免。只需调整您的工作目录或保存临时文件的结构即可。文件名太长,或者目录嵌套太深,因此路径超出了Windows的路径限制


另一方面,在Unix系统上,最大路径明显更长,但最大文件名长度为255个字符。

这可以通过在Windows 10上更改注册表来解决

  • 在开始菜单中搜索
    regedit
    ,打开注册表编辑工具
  • 导航到
    Computer\HKEY\u LOCAL\u MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
  • LongPathsEnabled
    0
    更改为
    1
  • 现在256个字符的限制将被忽略


    更新2018年8月4日:如果您的R工作目录位于Google驱动器文件流文件夹内,则该限制仍然有效。这是因为GDFS是一个有自己气候的虚拟驱动器。

    只是澄清一下,在使用tidy()函数之前,该软件包是从库中调用的。@marc\s非常感谢您对这个问题所做的更正。您使用的是什么操作系统?我在Windows上看到过类似的错误,其中目录嵌套的级别太多。windowsapi有一个非常短的接口。在Unix系统上,这要长得多,但文件名的最大长度为255个字符。感谢@dshkol的评论。我正在使用Windows 10 64位。是否必须设置其他配置?我很好奇为什么rnotebooks(或rmarkdown)会有这种行为。我将代码放在rnotebook之外(键入代码并直接在R控制台中运行),它工作得很好。只需调整工作目录或保存临时文件的结构即可。它要么嵌套太深,要么使用太长的名称,因此路径超出了Windows的路径限制。非常感谢Gabriel。不幸的是,如果目录在OneDrive(Sharepoint)folderI中,它也无法工作。我根本不理解这一点,但它工作得很好!谢谢你的帮助。它应该是相同的注册表位置。如果它对您不起作用,请告诉我我的LongPathsEnabled已设置为1,但我不断收到相同的错误。如何调整保存tempfile的结构?您可以在
    .renviron
    文件中将其指定为选项。这里有一个例子:这个Windows问题很痛苦,为什么一开始就有这个限制?我希望有一天新版本的Windows能结束这种痛苦
    Error in tempfile(pattern = "_rs_rdf_", tmpdir = outputFolder, fileext = ".rdf") : temporary name too long
    4.
    tempfile(pattern = "_rs_rdf_", tmpdir = outputFolder, fileext = ".rdf")
    3.
    overridePrint(o$x, o$options, o$className, o$nRow, o$nCol)
    2.
    print.data.frame(x)
    1.
    function (x, ...) UseMethod("print")(x)