lapply(tk_choose.files)自定义文件选择窗口

时间:2016-07-12 07:20:43

标签: r xlsx lapply filechooser

我想创建一个会弹出的对话窗口,用户可以选择多个xlsx文件并返回数据列表。我发现可能的解决方案是使用tk_choose.files,但它给了我一个错误。

choose.dir(getwd(), "Choose a suitable folder")

library(xlsx)
library(rJava)
library(xlsxjars)
library(tcltk)

#get file names
f = list.files("./")

#read files
dat = lapply(f, function(i){
  x = tk_choose.files(caption="Choose your files"), read.xlsx(i, sheetIndex = 1, sheetName = NULL, startRow = 24,
                endRow = NULL, as.data.frame = TRUE, header = FALSE)
  #return columns with names and colors
  x = x[, c(2, 5, 7, 9, 11, 13, 15, 17, 19), drop=FALSE]
  #return the data
  x
})
  

错误:意外','在:   " dat = lapply(f,function(i){   x = tk_choose.files(caption ="选择你的文件"),"

我知道语法中存在错误,但我对R来说很新,并且不知道如何正确编写它。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

你可以尝试一下

#read files
dat <- lapply(tk_choose.files(caption="Choose your files"), function(i) {
  x <- read.xlsx(i, sheetIndex = 1, sheetName = NULL, startRow = 24,
                 endRow = NULL, as.data.frame = TRUE, header = FALSE)
  #return columns with names and colors
  x <- x[, c(2, 5, 7, 9, 11, 13, 15, 17, 19), drop = FALSE]
 #return the data
  x
})

这样,用户在步进lapply调用中的文件名向量之前选择文件。

您收到错误,因为您在一行上有两个用逗号分隔的语句。你的代码:

x = tk_choose.files(caption="Choose your files"), read.xlsx(i, sheetIndex = 1, sheetName = NULL, startRow = 24,
            endRow = NULL, as.data.frame = TRUE, header = FALSE)

第一个陈述是

x = tk_choose.files(caption="Choose your files")

将所选文件名分配给变量x。然后你有一个逗号和第二个声明

read.xlsx(i, sheetIndex = 1, sheetName = NULL, startRow = 24,
          endRow = NULL, as.data.frame = TRUE, header = FALSE)

其结果根本没有存储。