【问题标题】:Writing a loop to output pathnames with multiple variables编写循环以输出具有多个变量的路径名
【发布时间】:2021-12-12 19:55:59
【问题描述】:

我有一个名为“列表”的dataframe,如下所示:

Name Institution Department
Adam A xxx
Eve B yyy
John A zzz
Jane C xxx

我还有另一个 dataframe 的其他数据,我想从使用名称中提取信息 - 这部分没问题。

我的问题是在尝试使用多个变量输入获取 file_path 时出现的。

我如何有一个循环来读取每一行中的变量以正确获取 file_path:

parent_dir<-"Documents/Files"
        
for (i in List$Name) {
name <- i
        
for (j in List$Institution) {
inst <- j
        
for (k in List$Department) {
dept<-k

file_path<-paste0(parent_dir,"/",inst,"/",dept,"/",name,".xlsx")

answer <- data[is.element(Data$Name, i), ]
file.copy(template_path,file_path)
wb<-loadWorkbook(file_path,create = FALSE)
writeWorksheet(wb,answer,sheet="Staff",header=FALSE)
saveWorkbook(wb,file_path)

}}}

我想做的是为dataframe 中的每一行提供以下file_path

 "/Documents/Files/A/xxx/Adam.xlsx"
 "/Documents/Files/B/yyy/Eve.xlsx"
 "/Documents/Files/A/zzz/John.xlsx"
 "/Documents/Files/C/xxx/Jane.xlsx"

我现在得到的是:

“A/xxx”和“A/zzz”中的“Adam.xlxs”

或其他错误消息,例如:

目录“A/yyy”不存在。

如果只有 1 个循环/变量,这个块就可以正常工作:

for (i in List$Name) {
        
    file_path<-paste0(parent_dir,"/",i,".xlsx")

    answer <- data[is.element(Data$Name, i), ]
    file.copy(template_path,file_path)
    wb<-loadWorkbook(file_path,create = FALSE)
    writeWorksheet(wb,answer,sheet="Staff",header=FALSE)
    saveWorkbook(wb,file_path)
    }

也欢迎任何其他建议/解决方案!

提前谢谢你!

【问题讨论】:

    标签: r loops data-manipulation


    【解决方案1】:

    使用apply 循环而不是paste,使用file.path 来形成不带扩展名的文件名。然后paste0 扩展。

    parent_dir<-"Documents/Files"
    apply(List, 1, \(x, parent_dir, ext){
      f <- file.path(parent_dir, x[2], x[3], x[1])
      paste0(f, ext)
    }, parent_dir = parent_dir, ext = ".xlsx")
    #[1] "Documents/Files/A/xxx/Adam.xlsx"
    #[2] "Documents/Files/B/yyy/Eve.xlsx" 
    #[3] "Documents/Files/A/zzz/John.xlsx"
    #[4] "Documents/Files/C/xxx/Jane.xlsx"
    

    注意:在路径名前有一个"/" 将它添加到parent_dir

    parent_dir <- "/Documents/Files"
    

    数据

    List <- read.table(text = "
    Name    Institution     Department
    Adam    A   xxx
    Eve     B   yyy
    John    A   zzz
    Jane    C   xxx
    ", header = TRUE)
    

    【讨论】:

      猜你喜欢
      • 2015-08-31
      • 1970-01-01
      • 2014-01-07
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 2018-03-28
      相关资源
      最近更新 更多