Wojciech
Sobala
Redaktor
statystyczny,
biostatystyk,
Instytut Medycyny
Pr...
Maciej B. Doktorant
Temat: do.call(fun, ...) czy do.call("fun", ...)
Hmm przyznam, że nie wiem na czym polega różnica. Jak wymienione zapisy wpływają działanie funkcji do.call?
Wojciech
Sobala
Redaktor
statystyczny,
biostatystyk,
Instytut Medycyny
Pr...
Temat: do.call(fun, ...) czy do.call("fun", ...)
Jeżeli przypiszemy c <- 1, to wywołanie do.call(c,...) nie zadziała ale do.call("c",...) zadziała tak jak się spodziewamy czyli skorzysta z funkcji c.Michał Bojanowski socjolog, analityk
Temat: do.call(fun, ...) czy do.call("fun", ...)
Bezpieczniej przez "fun", bo, jak sam doświadczyłeś, użycie fun najpierw patrzy w GlobalEnv i jak się trafi obiekt o tej samej nazwie, który nie jest funkcją, to dostaniemy error.Edit: Gwoli ścisłości, to najpierw patrzy w "parent environment", którym w tym konkretnym przypadku był GlobalEnv. Można sterować argumentem 'envir' np.:
Michał Bojanowski edytował(a) ten post dnia 19.10.12 o godzinie 09:46
c <- 1:5
do.call(c, list(1,2))
# Error in do.call(c, list(1, 2)) :
# 'what' must be a character string or a function
do.call("c", list(1,2))
# [1] 1 2
# ciekawe, że to nie daje błędu...
do.call("c", list(1,2), envir=.GlobalEnv)
# [1] 1 2
do.call(c, list(1,2), envir=.GlobalEnv)
# Error in do.call(c, list(1, 2), envir = .GlobalEnv) :
# 'what' must be a character string or a function
# 'c' jest funkcją
c <- function(...) paste(..., collapse="|")
# użyta wersja z 'base'
do.call(c, list(1,2))
# [1] "1 2"
do.call("c", list(1,2))
# [1] "1 2"
# użyta wersja usera
do.call("c", list(1:2))
# [1] "1|2"
do.call(c, list(1:2))
# [1] "1|2"
# caly czas z GlobalEnv
do.call(c, list(1:2), env=asNamespace("base"))
# [1] "1|2"
# a tu juz "poprawnie" z 'base'
do.call("c", list(1:2), env=asNamespace("base"))
# [1] 1 2
Wojciech
Sobala
Redaktor
statystyczny,
biostatystyk,
Instytut Medycyny
Pr...
Temat: do.call(fun, ...) czy do.call("fun", ...)
Wspomniałem o tym problemie, bo spotkałem się z opiniami, że nie trzeba używać cudzysłowów w przypadku wywoływania do.call. Jak widać nie jest to prawda i nie we wszystko co w internecie piszą trzeba wierzyć.Michał Bojanowski socjolog, analityk
Temat: do.call(fun, ...) czy do.call("fun", ...)
Jak widać nie jest to prawda i nie we wszystko co w internecie piszą trzeba wierzyć.
:)
Podobne tematy
-
Wiadomości literackie » J.K. Rowling zastanawia się nad kolejną częścią przygód... -
-
Druk » ‹ ogłoszenia › Oferty — sprzęt używany -
-
LUKSUS LUXUS » Lancôme Absolue L’Extrait -
-
Karierait praca w branży IT » Zlecenie dla specjalistów ds. dokumentacji technicznej /... -
-
TOP FRYZJERZY » We are seeking a professional hairstylist to our L’Oreal... -
-
Barcelona » Sant Sadurní d’Anoia -
-
Gospodarka przestrzenna » Planuj z GIS’em będzie szybciej – jak skutecznie... -
-
Szkolenia w całej Polsce » SZKOLENIE pt.: Profilaktyka oraz Terapia... -
-
Druk » ‹ informacje › Literatura (książki) -
-
Druk » ‹ informacje › Pomocnik -
Następna dyskusja: