1

我一直在用 R 编写一个程序,该程序为我今年夏天与其他几个人合作的一个研究项目输出随机方案,我已经完成了大部分工作,除了一个功能。我一直在做的部分工作是让它真正对用户友好,以便程序会提示用户输入某些信息,从而知道需要随机化的内容。我将其设置为检查每条用户输入以确保它是有效输入,如果不是,则再次提供错误消息/提示用户。我唯一不能弄清楚的是如何让它检查 .csv 输出的文件名是否有效。有谁知道是否有办法让 R 检查字符串是否为有效的 Windows 文件名?谢谢!

4

1 回答 1

1

不允许使用这些字符:/\:*?"<>|. 因此,如果它包含任何这些,请警告用户。

也不允许使用其他一些名称:COM, AUX, NUL, COM1to COM9, LPT1to LPT9

您可能想使用正则表达式检查文件名是否有效。请参阅此其他答案以获取 Java 示例,该示例应在 R 中进行最少的调整。 https://stackoverflow.com/a/6804755/134830

您可能还想检查文件名长度(260 个字符以获得最大的可移植性,但在某些系统上允许使用更长的名称)。

最后,在 R 中,如果您尝试在不存在的目录中创建文件,它仍然会失败,因此您需要将名称拆分为文件名和目录名(使用basenameand dirname)并尝试创建目录首先,如有必要。

也就是说,David Heffernan 在他的评论中给出了很好的建议,让 Windows 来决定它是否可以创建文件:你不想错误地告诉用户文件名无效。

你想要这样的东西:

nice_file_create <- function(filename)
{
  directory_name <- dirname(filename)
  if(!file.exists(directory_name))
  {
    ok <- dir.create(directory_name)
    if(!ok)
    {
      warning("The directory of that path could not be created.")
      return(invisible())
    }
  }
  tryCatch(
    file.create(filename),
    error = function(e)
    {
      warning("The file could not be created.")
    }
  )
}

但首先要彻底测试!有各种各样的边缘情况可能会失败:尝试 UNC 网络路径名、“~”和带有“.”的路径。和“..”在他们。

于 2013-06-23T16:49:38.003 回答