Предположим, что у меня есть кадр данных со столбцом, имя которого хранится в переменной. Доступ к этому столбцу с помощью переменной является легкой нотацией скобки использования:
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()
обеспечит те же результаты, которые дают скобки?
Вы можете использовать get
:
with(df, get(column.name))
Вы используете 'with' для создания локализованного и временного пространства имен, внутри которого вы оцениваете некоторое выражение. В приведенном вами коде вы не передали выражение.
Например:
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'
Гораздо чище использовать 'with':
tx = with( iris, tapply(sepal.len, list(species), mean) )
Итак, сигнатура вызова (неформально) такова: with( data, function() )