使用菜单从a加载文件

时间:2013-04-13 03:46:31

标签: r menu

我想设置一个基于菜单的函数,它将为用户提供目录中找到的文件列表,询问他们要加载哪个文件,然后将该文件作为新对象加载。

就代码的外观而言,这是我最好的尝试,让您了解我正在寻找的内容:

#Step 1: First create list of files arranged by date created

F<-file.info(list.files("./myfiles",pattern=".csv",full.names=TRUE))

#Order files according to date created, most recent first
F<-F[with(F, order(as.POSIXct(mtime))), ]

Files<-rownames(F)

#Step 2: Offer menu to user
Choose<-menu(Files,title="Choose which File to Load")


#Step 3: Use result of menu to load file

New_File<-read.csv(*result from menu*)

上面我想象的代码显然存在一些问题:

1-我需要使用full.names = TRUE才能在我的工作目录中的子文件夹上使用file.info。这很好用,但是当我最终使用菜单命令的行名时 - 菜单列表变得混乱。如果我在工作目录中的一系列子文件夹中工作,则打印整个字符串而不仅仅是文件名(仅文件名是理想的)。

2-我认为,由于我已经设置了订单,最新的文件是列表中的最后一个(我希望它们是第一个)

3-最后,最重要的是,我不知道使用菜单选择的结果然后将.csv文件加载到新的R对象

2 个答案:

答案 0 :(得分:2)

我认为这可以按你的意愿运作:

select.read.csv <- function(dir) {

   basenames  <- list.files(dir, pattern=".csv")
   full.paths <- file.path(dir, basenames)
   new.order  <- order(as.POSIXct(file.info(full.paths)$mtime), decreasing = TRUE)
   basenames  <- basenames[new.order]
   full.paths <- full.paths[new.order]
   selected   <- full.paths[menu(basenames,title = "Choose which File to Load")]

   read.csv(file = selected)
}

select.read.csv(dir = "./myfiles")

答案 1 :(得分:0)

如果我理解你想要什么,这已经在tcltk包中为你完成了。因此,除非您将此作为练习,否则您将更容易使用:

library(tcltk)
?tk_choose.files()
read.csv(tk_choose.files())