2012-09-14 18 views
6

Al mejorar un método rbind, me gustaría extraer los nombres de los objetos que se le pasaron para poder generar ID únicos a partir de ellos.Obteniendo nombres de ... (puntos)

he tratado all.names(match.call()) pero eso me da:

[1] "rbind"   "deparse.level" "..1"   "..2" 

ejemplo genérico:

rbind.test <- function(...) { 
    dots <- list(...) 
    all.names(match.call()) 
} 

t1 <- t2 <- "" 
class(t1) <- class(t2) <- "test" 
> rbind(t1,t2) 
[1] "rbind"   "deparse.level" "..1"   "..2" 

Considerando lo que me gustaría ser capaz de recuperar c("t1","t2").

Soy consciente de que, en general, no se pueden recuperar los nombres de objetos pasados ​​a funciones, pero parece que con ... podría ser posible, ya que substitute(...) devuelve t1 en el ejemplo anterior.

+2

posible duplicado de [Cómo utilizar la función de puntos suspensivos de R al escribir su propia función?] (Http://stackoverflow.com/questions/3057341/how-to-use-rs-ellipsis-feature-when-writing-your -own-function) –

+0

Hay algunas buenas respuestas en la otra pregunta. Incidentalmente, el término para esos puntos es "puntos suspensivos" (lo que hace que sea mucho más fácil para Google). –

+0

@DavidRobinson: ninguna de esas respuestas se aplica porque 'rbind' y' cbind' utilizan el envío de métodos no estándar. La respuesta a esta pregunta se encuentra en los comentarios de una de las respuestas a la pregunta a la que se vinculó. –

Respuesta

8

El uso de la guía aquí How to use R's ellipsis feature when writing your own function?

por ejemplo substitute(list(...))

y la combinación con la as.character

rbind.test <- function(...) { 
    .x <- as.list(substitute(list(...)))[-1] 
    as.character(.x) 
} 

también se puede utilizar

rbind.test <- function(...){as.character(match.call(expand.dots = F)$...)} 
13

Escogí este uno de Bill Dunlap on the R Help List Serve:

rbind.test <- function(...) { 
    sapply(substitute(...()), as.character) 
} 

Creo que esto le da lo que quiere.

+1

Cool. ¿Puedes explicar la pieza '...()'? Claramente no es de fiar por sí mismo, y no puedo imaginar lo que estaría haciendo dentro del 'sustituto '. –

+0

Uh no, no puedo Bill Dunlap es un genio que no soy. No tengo idea de por qué funciona, pero es su método preferido y explica la eficacia en una publicación en línea. Lo siento, no tengo la referencia pero fue en los últimos 4 a 5 meses. –

+3

Bueno, si está confundido, creo que merece una [nueva pregunta] (http://stackoverflow.com/questions/12523548/confused-by). Estoy deseando que mi mente explote. –

Cuestiones relacionadas