Доступ к произвольным столбцам из фрейма данных R с помощью () - PullRequest
9 голосов
/ 10 апреля 2010

Предположим, у меня есть фрейм данных со столбцом, имя которого хранится в переменной. Получить доступ к этому столбцу с помощью переменной легко с помощью скобочной записи:

df <- data.frame(A = rep(1, 10), B = rep(2, 10))
column.name <- 'B'

df[,column.name]

Но не очевидно, как получить доступ к произвольному столбцу с помощью вызова with(). Наивный подход

with(df, column.name)

эффективно оценивает column.name в среде вызывающего. Как можно отложить оценку настолько, чтобы with() дал те же результаты, что и скобки?

Ответы [ 2 ]

17 голосов
/ 10 апреля 2010

Вы можете использовать get:

with(df, get(column.name))
1 голос
/ 10 апреля 2010

Вы используете 'с', чтобы создать локализованное и временное пространство имен, внутри которого вы оцениваете какое-то выражение. В приведенном выше коде вы не передали выражение.

Например:

data(iris)   # this data is in your R installation, just call 'data' and pass it in

Обычно вы должны ссылаться на имена переменных внутри фрейма данных следующим образом:

tx = tapply(iris$sepal.len, list(iris$species), mean)

Если вы не сделаете это:

attach(iris)

Проблема с использованием 'attach' заключается в вероятности конфликтов пространства имен, поэтому вы должны помнить, чтобы вызывать 'detach'

Гораздо чище использовать 'с':

tx = with( iris, tapply(sepal.len, list(species), mean) )

Итак, подпись вызова (неформально): with (data, function ())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...