我一直在R中编写一个程序,为今年夏天我和其他几个人一起研究的项目输出随机化方案,除了一个功能外,我已经完成了大部分工作。我一直在做的部分是让它真正用户友好,这样程序就会提示用户提供某些信息,因此知道需要随机化的内容。我已将其设置为检查每个用户输入以确保它是有效输入,并且如果不是则给出错误消息/再次提示用户。我唯一不能弄清楚的是如何让它来检查.csv输出的文件名是否有效。有没有人知道是否有办法让R检查一个字符串是否有效的Windows文件名?谢谢!
答案 0 :(得分:1)
不允许使用这些字符:/\:*?"<>|
。因此警告用户是否包含任何内容。
其他一些名称也被禁止:COM
,AUX
,NUL
,COM1
至COM9
,LPT1
至{{1} }。
您可能希望使用正则表达式检查文件名是否有效。请参阅另一个答案,了解一个Java示例,该示例应该在R中进行最少的调整。 https://stackoverflow.com/a/6804755/134830
您可能还需要检查文件名长度(260个字符以获得最大的可移植性,但某些系统允许使用更长的名称)。
最后,在R中,如果您尝试在不存在的目录中创建文件,它仍然会失败,因此您需要将名称拆分为文件名和目录名(使用LPT9
和basename
)并尝试在必要时首先创建目录。
也就是说,David Heffernan在评论中给出了很好的建议,让Windows在决定是否可以创建文件时执行操作:您不想错误地告诉用户文件名无效。
你想要一些像这样的东西:
dirname
但首先要彻底测试!有各种各样的边缘情况可以解决问题:尝试使用UNC网络路径名“〜”和带有“。”的路径。和“..”在其中。