Funkcja cat
będzie drukować na urządzeniu (domyślnie konsola) i nie będzie dodawać żadnych zwykłych adnotacji, ale nie może przyjąć listy jako argumentu, więc wszystko musi być wektorem atomowym. Gambit deparse(substitute())
jest sposobem na odzyskanie nazw list, które zostały przekazane do funkcji. Używanie tylko names(x)
wewnątrz funkcji nie pozwala odzyskać nazwy oryginalnego argumentu.
mylist <- list(first =c(234984, 10354, 41175, 932711, 426928),
second =c(1693237, 13462))
fnlist <- function(x){ z <- deparse(substitute(x))
cat(z, "\n")
nams=names(x)
for (i in seq_along(x)) cat(nams[i], x[[i]], "\n")}
fnlist(mylist)
mylist
second 234984 10354 41175 932711 426928
first 1693237 13462
Ta wersja będzie wyjściowy plik (i można zastąpić „\ t”, jeśli chciał zakładek pomiędzy nazwami i wartościami
fnlist <- function(x, fil){ z <- deparse(substitute(x))
cat(z, "\n", file=fil)
nams=names(x)
for (i in seq_along(x)){ cat(nams[i], "\t", x[[i]], "\n",
file=fil, append=TRUE) }
}
fnlist(mylist, "test")
Działa idealnie! Szkoda, że wymaga znacznie więcej kodu (w porównaniu do pisania bez nazwy). Wielkie dzięki! –
Nigdy nie do końca zrozumiałem, dlaczego funkcja cat.list też nie istnieje. Sądzę, że jest to postrzegane jako samoistnie niskiego poziomu i nie nadaje się do generalizacji. –
Zwróć też uwagę, że 'cat' nie może obsługiwać obiektów z klasą' language' lub 'call' (i być może z innymi). –