with
удобен и улучшает читаемость в интерактивном контексте, но может повредить ваш мозг в контексте программирования, когда вы передаете вещи назад и вперед функциям и работаете с вещами в различных средах.В целом, в R использование символов, а не имен, является своего рода «семантическим сахаром», который удобен и удобен для чтения в интерактивном режиме, но слегка не рекомендуется для программирования [например, $
, subset
]).Если вы готовы пойти на компромисс, если будете использовать имя ("a"
), а не символ (a
), тогда я бы предложил вернуться к более простому obj[[col]]
вместо использования with
здесь ...
Итак, как самостоятельный ответ:
foo <- function(object,col) {
print(names(object))
print(object[[col]])
}
Если вы хотите разрешить несколько столбцов (то есть вектор символов)
foo <- function(object,col) {
print(names(object))
print(object[col])
}
edit: отказ от использования subset
с функцией по предложению @ hadley
(при этом ответ печатается в виде фрейма данных, даже если выбран один столбец, что может оказаться не тем, что вам нужно).