2017-08-25 3 views
0

Ich möchte eine Datei wie die folgende Zeile auswählen, die nicht wie ich wollte.R: Wählen Sie eine Datei mit einem bestimmten Namen und die zuletzt aktualisierte

which(substr(rownames(fInfo),1,8) == "mySource") & which.max(fInfo$mtime) 

In einem englischen Satz möchte ich Dateien, deren Namen mit „MySource“ und in denen beginnen zu wählen, wen gewählt, ich habe die zuletzt aktualisierte Datei auswählen möchten.

Mein Skript unten ist ausreichend, aber es ist zu lang. Kann jemand mein Skript kürzen?

# create dummy files under Folder "scriptFld" 
ifelse(!dir.exists(file.path("scriptFld")), dir.create(file.path("scriptFld")), FALSE) 
strTime = format(Sys.time(), "%H%M") 
file.create(NA, paste0("scriptFld/mySource1_", strTime,".R")); Sys.sleep(1) 
file.create(NA, paste0("scriptFld/mySource2_", strTime,".R")); Sys.sleep(1) 
file.create(NA, paste0("scriptFld/notMySource3_", strTime,".R")) 


# read source R files 
setwd("scriptFld") 
fInfo = file.info(list.files()) # find all files under the folder "scriptFld" 
iCandidate = which(substr(rownames(fInfo),1,8) == "mySource") # focus on file names starting with "source" 
iCandidateMax = iCandidate[ which.max(fInfo$mtime[iCandidate]) ] # choose the most recent file 
fSourceName = rownames(fInfo)[iCandidateMax] 
source(file = fSourceName) # This is what I want, except the script is too long. 
setwd("..") 
(fSourceName) 
+2

Wie wäre es 'x <- list.files (pattern = "^ MySource"); source (x [which.max (file.info (x) $ mtime)]) vorausgesetzt, du hast die wd korrekt davor gesetzt –

+0

Das ist genau das, was ich wollte. Vielen Dank! – stok

Antwort

0

Sie tun können:

library(dplyr) 
files <- list.files("scriptFld", pattern = "^mySource", full.names = TRUE) 
files %>% 
    file.info() %>% 
    pull(mtime) %>% 
    which.max() %>% 
    files[.] %>% 
    source() 
Verwandte Themen