我一直在用 R 编写一个程序,该程序为我今年夏天与其他几个人合作的一个研究项目输出随机化方案,除了一个功能之外,我已经完成了其中的大部分内容。我一直在做的部分工作是使其真正用户友好,以便程序会提示用户输入某些信息,从而知道需要随机化哪些内容。我将其设置为检查每一个用户输入,以确保它是有效的输入,如果不是,则再次给出错误消息/提示用户。我唯一不太明白的是如何让它检查 .csv 输出的文件名是否有效。有谁知道是否有办法让 R 检查字符串是否构成有效的 Windows 文件名?谢谢!
最佳答案
不允许使用以下字符: /\:*?"<>|
。因此,如果它包含其中任何一个,请警告用户。
其他一些名称也是不允许的: COM
、 AUX
、 NUL
、 COM1
到 COM9
、 LPT1
到 LPT9
。
您可能想使用正则表达式检查文件名是否有效。请参阅另一个答案,了解 Java 示例,该示例只需进行最少的调整即可在 R 中工作。 https://stackoverflow.com/a/6804755/134830
您可能还想检查文件名长度(260 个字符以实现最大的可移植性,但某些系统允许更长的名称)。
最后,在 R 中,如果您尝试在不存在的目录中创建文件,它仍然会失败,因此您需要将名称拆分为文件名和目录名(使用 basename
和 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 网络路径名、“~”和带有“.”的路径。和其中的“..”。
关于windows - 如何使用 R 检查字符串是否是 Windows 的有效文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17262493/