如何读取具有动态名称的文件,同时避免在 R 中进行硬编码?
Posted
技术标签:
【中文标题】如何读取具有动态名称的文件,同时避免在 R 中进行硬编码?【英文标题】:How to read in file with dynamic name while avoiding hard-coding in R? 【发布时间】:2020-01-30 05:46:36 【问题描述】:我在读取具有动态名称的 csv 文件时遇到问题并且避免对文件路径进行硬编码。我想要简洁的代码(非硬编码)。如果我对完整路径(“~”之前的所有内容)进行硬编码,它可以很好地读取文件。但是软编码(如果这与硬编码相反)它给出错误的文件路径(尽管在错误中显示了正确的路径。我有两个可变部分的文件名,我在阅读之前粘贴到文件名中在。如果我避免粘贴,只为每个人输入一个路径,它也可以工作。
#dynamic part I usually have in a loop with all the options.
part_a <- "outside" #other options here in my loop include "inside"
part_b <- "late" # other option "early" or "preterm"
#reading in the df
df <-read.csv(paste0("~/Data/FromR/clean_",part_a,part_b,"_2016.csv"),
check.names=FALSE, na.strings="null")
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
cannot open file 'C:/Users/myname/Documents/Data/FromR/clean_outsidelate_2016.csv': No such file or directory
如果我按照建议的here 在粘贴的第一部分使用getwd()
代替~
,它可以通过在粘贴开始时生成此字符串"C:/Users/myname/Documents/MyR_Projects/Specific_R_project/"
来工作。但是我怎样才能让它与“〜”一起工作?使用~
时,它会停在“Documents”文件夹...
期望的结果是正确读取文件并执行功能并与其他文件重复。我的循环可以很好地硬编码,我只想让它更通用或软编码。
【问题讨论】:
请包括预期输出。您是否要读取两个文件?getwd()
返回什么?
我更新了问题。现在要解决的问题涉及要读入的单个文件。getwd()
返回工作目录路径中的所有内容,正如我在问题中更正的那样。
【参考方案1】:
我刚刚尝试从另一个 wd
读取我家中的文件 (testFile.txt
),它与 ~
一起工作正常
myFile <- "testFile
mymy <- ".txt"
ciao <- read.delim(paste0("~/",myFile,mymy))
在powershell中你可以使用%~%
(看看这里tread),但我不知道如何在R中扩展$HOME
。
#-------- edit
看看here 和here。基本上,.Renviron
中定义的任何变量都应该可以访问。
【讨论】:
修复了我的问题,使其具有正确的文件名。有哪些资源可以检查单个字符符号的处理方式,例如~
?以上是关于如何读取具有动态名称的文件,同时避免在 R 中进行硬编码?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 R 中迭代以同时保存多个文件并避免“absolute_path(target) 中的错误:'x' 必须是单个字符串”?