with
es útil y mejora la legibilidad en una contexto interactivo, pero puede dañar su cerebro en un contexto de programación en el que está pasando cosas de un lado a otro a funciones y tratando cosas en diferentes entornos. En general, dentro de R, el uso de símbolos en lugar de nombres es una especie de "azúcar semántica" que es conveniente y legible en el uso interactivo, pero ligeramente obsoleto para la programación [p. $
, subset
]). Si usted está dispuesto a comprometer por lo que el uso de un nombre ("a"
) en lugar de un símbolo (a
) entonces sugeriría caer de nuevo a la más simple obj[[col]]
en lugar de utilizar with
aquí ...
Por lo tanto, como un auto -contained respuesta:
foo <- function(object,col) {
print(names(object))
print(object[[col]])
}
Si quería para permitir múltiples columnas (es decir, un vector de caracteres)
foo <- function(object,col) {
print(names(object))
print(object[col])
}
edición: REFRA desde el uso de subset
con una función, en la sugerencia de @ hadley
(esto imprimirá la respuesta como un marco de datos, incluso si se selecciona una sola columna, que puede no ser la que desea).
Probablemente sea útil tener un contexto más amplio sobre lo que está tratando de lograr. –