[R] Suggestions for vectorizing/double loop
lists at dewey.myzen.co.uk
Mon Jan 23 14:21:59 CET 2017
It is not compulsory to avoid for loops but see below
On 23/01/2017 12:28, Luanna Dixson wrote:
> I need to rename a bunch of files, by searching for string matches in a
> list. Each list element containings a character with the old filename that
> I want to match to, and the new file name that I want to rename by.
> For instance, here filename '1001.xls' should match to list[]$oldname
> and I want to rename it to 'newa.xls' from list[]$newname.
> The actual new file names I have will feature a random alphanumeric number
> and the list will have a length of ~600.
> # files I want to rename
> files with old file name =c('1001.xls', '1002.xls')
> # list with old file names and new file names
> oldnames=c('1001', '1002', '1003')
> newnames=c('newa', 'newb', 'newc')
> list <- split(df, rownames(df))
Both df and list are already in existience and you are overwriting them.
It is best practice not to do that.
> # turn list elements in character
> for(i in 1:length(list)) list[[i]]$oldnames=as.character(list[[i]]$oldnames)
lapply(list, function(x) x$oldnames <- as.character(x$oldnames))
would probably work.
You might want sapply instead of lapply
> for(i in 1:length(list)) list[[i]]$newnames=as.character(list[[i]]$newnames)
> I heard that it would be better to vectorize this than trying to do a
> double loop so if someone could give me a hint about how to do this I would
> be very grateful!
> [[alternative HTML version deleted]]
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help