SORU
21 EYLÜL 2012, Cuma


...() Kafası karışık?

another question, sapply(substitute(...()), as.character) isimler işleve elde etmek için bir işlev içinde kullanılmıştır. as.character kısmı kulağa hoş geliyor, ama ne ...() yapar mı?

substitute dışında geçerli bir kod değil

> test <- function(...) ...()
> test(T,F)
Error in test(T, F) : could not find function "..."

Daha fazla test bazı durumlarda:

> test <- function(...) substitute(...())
> test(T,F)
[[1]]
T

[[2]]
F

> test <- function(...) substitute(...)
> test(T,F)
T

CEVAP
22 EYLÜL 2012, CUMARTESİ


İşte ...() Bu şekilde çalışır neden bir kroki. Daha ayrıntılı bilgi ve başvurular daha sonra anlatırım, ama önemli noktaları bu dokunur.

  1. Bileşenlerinden herhangi bir değiştirme yapmadan önce, substitute() ilk R deyimi ayrıştırır.

  2. ...() ... ad bir nesneye ayrıştırır, oysa bir arama nesnesi için ayrıştırır.

  3. ... özel bir nesne, yalnızca işlev çağrıları kullanılmak üzere tasarlanmıştır. Sonuç olarak, ikame uygulayan bir C kodu özel önlemler çağrısı bir nesne bulunduğunda ... ele alır. Benzer önlemlerdeğil... bir sembol olarak ortaya çıktığında çekilmiş. (İlgili kod fonksiyonları do_substitute, substitute * * * R_SRCDIR/src/main/coerce.c. substituteList (özellikle son ikisi))

Yani, rolü () ...() neden ifadeye incelenemeyecek kadar bir ara (aka dili) nesne, böylece ikame döndürecektir tam olarak genişletilmiş değer noktalar. Görünse de şaşırtıcı ... alır yedek için bile zaman dışarıda olan () ancak: (a) aramaları saklı DAHİLİ olarak listesi gibi nesneler ve (b) ilgili C kodu gibi görünüyor arasında bir ayrım yapmak ilk eleman listesini ve sonraki olanlar.


Sadece bir yan not: substitute incelenmesi davranış ya da çeşitli nesnelerin sınıfları, yararlı, böyle küçük bir kum kurmak buluyorum

f <- function(...) browser()
f(a = 4, 77, B = "char")
## Then play around within the browser
class(quote(...))  ## quote() parses without substituting
class(quote(...()))
substitute({...})
substitute(...(..., X, ...))
substitute(2 <- (makes * list(no - sense))(...))

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
R

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Disney Pets and Animals

    Disney Pets

    29 ŞUBAT 2012
  • RiceBunny

    RiceBunny

    16 ŞUBAT 2006
  • Triune Films

    Triune Films

    9 ŞUBAT 2006