Untuk menggunakan pelbagai objekt tanpa mengulangi komando beberapa kali boleh dilakukan semada menggunakan loop atau salah satu cara apply. Masalahnya bila objekt-objekt disenaraikan sebagai vektor, objekt tersebut ditukarkan ke struktur chr. Oleh sebab itu objekt tersebut tidak dapat diproses seterusnya.
Salah satu penyelesaian masalah ini ialah menggunakan sapply. Akan tetapi ianya bergantung dengan penggunaan argument:
- `USE.NAME = TRUE`.
- `get()`
Contohnya, bila ingin menggunakan objekt2 ini di .GlobalEnv:
dt2000
dt2001
dt2002
dt2013
dt2014
Untuk dapatkan semua objekt-objekt diatas, boleh dikumpulkan menggunakan vector seperti begini:
objAll <- grep("^(dt200|dt201)*$", ls(), ignore.case = TRUE, value = TRUE)
objAll
[1] "dt2000" "dt2001" "dt2002" "dt2013" "dt2014"
Untuk mencapai objekt2 itu melalui objAll
, boleh menggunakan sapply.
sapply(objAll, function(x) setDT(get(x)), USE.NAMES = TRUE)
Atau untuk menggunakan fungsi lain:
## Convert til excel
indK <- grep("^dt200", ls(), value = TRUE)
pathXL <- "~/Git-work/bdr/rapport/portal/excel/"
sapply(indK, function(x) write.xlsx(get(x), paste0(pathXL, x, ".xlsx")), USE.NAMES = TRUE)
Komando diatas menukarkan semua object di objAll
ke data.table. Tanpa memakai USE.NAMES
komando ini tidak akan berhasil kerana vector di objAll
dibaca sebagai character. Selain itu penggunaan get juga penting untuk memastikan yang kandungan di objAll
mempunyai nilai.
Contoh komando untuk dapatkan semua nama kolom sykehus
di semua data.table. Penggunaan \\b
diawal dan akhir perkataan ialah untuk menetapkan nama kolom betul-betul hanya sykehus
tanpa tambahan contohnya inn_sykehus
atau sykehus_2
sapply(objAll, function(x), grep("\\bsykehus\\b", names(get(x)), ignore.case = TRUE, value = TRUE), USE.NAMES = TRUE)