Если вы начнете писать функции с именами переменных с аргументами, data.table
может оказаться более удобным, чем dplyr
. Я недавно написал пост на эту тему . По моему мнению, стандартную оценку легче обрабатывать с data.table
, чем dplyr
.
С data.table
у вас есть несколько способов использовать имена столбцов в качестве аргумента
Использование get
Вы можете использовать get
, который отображает имя со значением в определенной области. Здесь область действия вашего data.table
:
library(data.table)
funtest <- function(dat,var,newvar){
dat[, (newvar) := get(var)]
}
:=
является оператором обновления по ссылке. Если вы хотите узнать больше об этом, data.table
виньетки являются хорошим местом для начала. Вызов функции:
dt = data.table(iris)
funtest(dt, "Species","x")[]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species x
1: 5.1 3.5 1.4 0.2 setosa setosa
2: 4.9 3.0 1.4 0.2 setosa setosa
3: 4.7 3.2 1.3 0.2 setosa setosa
4: 4.6 3.1 1.5 0.2 setosa setosa
5: 5.0 3.6 1.4 0.2 setosa setosa
---
146: 6.7 3.0 5.2 2.3 virginica virginica
147: 6.3 2.5 5.0 1.9 virginica virginica
148: 6.5 3.0 5.2 2.0 virginica virginica
149: 6.2 3.4 5.4 2.3 virginica virginica
150: 5.9 3.0 5.1 1.8 virginica virginica
Использование .SD
Вы также можете использовать .SD
, что означает Подмножество данных . Это удобнее, когда у вас есть несколько переменных в кавычках. Это позволяет избежать !!!rlang::sym
, необходимого для dplyr
.
. Вы можете выполнять сложные вычисления с очень кратким синтаксисом:
df[, newcolnames := lapply(.SD, mean), by = grouping_var, .SDcols = xvars]