代码之家  ›  专栏  ›  技术社区  ›  Helen

R:在参数中使用求值问题编写\u xlsx

  •  0
  • Helen  · 技术社区  · 5 年前

    library(writexl)
    file_output="C:/test/test.xlsx"
    for(i in 1:2){
        df<-iris[i,]
        write_xlsx(list(i=df),file_output)
        }
    

    价值 属于 (或者在我的实际程序中:某个变量的值)。这是否可以通过write_xlsx实现,或者一般来说,是否可以通过write_xlsx(或其他函数)来解释:

    “list(i=df)”作为“list(1=df)”和“list(2=df)”

    0 回复  |  直到 5 年前
        1
  •  1
  •   ha-pu    5 年前

    而不是 i = df 必须命名列表元素。对于你的循环,这意味着:

    file_output = "C:/test/test.xlsx"
    for(i in 1:2){
      df <- iris[i,]
      out <- list(df)
      names(out) <- i
      write_xlsx(out, file_output)
    }
    

    但是,这将导致每个数据框,自 write_xlsx

    file_output = "C:/test/test.xlsx"
    vars <- 1:2
    out <- vector(mode = "list", length = length(vars))
    for(i in vars){ # if you use variable names in vars, use seq_along(vars) instead of vars
      out[[i]] <- iris[i,]
    }
    names(out) <- vars
    write_xlsx(out, file_output)
    

    既然我不认为在这里使用循环有什么好处,我甚至建议使用 map purrr lapply :

    file_output = "C:/test/test.xlsx"
    vars <- 1:2
    out <- map(vars, ~ iris[.x,])
    names(out) <- vars
    write_xlsx(out, file_output)
    
        2
  •  1
  •   RLave    5 年前

    只是使用 names() list 对象 as.character() 为了给床单命名。

    l <- lapply(1:2, function(i) iris[i, ]) #creates separated df for each row
    names(l) <- as.character(1:2) # sets the names of each element in the list
    # these will be the sheets name
    
    
    file="path_to_file.xlsx" # path to file name
    library(writexl)
    
    write_xlsx(l, file)