这个数据框
> jnk <- mtcars[1:3, 1:3]
> jnk
mpg cyl disp
Mazda RX4 21.0 6 160
Mazda RX4 Wag 21.0 6 160
Datsun 710 22.8 4 108
有以下课程:
> lapply(jnk, class)
$mpg
[1] "numeric"
$cyl
[1] "numeric"
$disp
[1] "numeric"
假设我定义了一个类“公式”,并希望将该类添加到第 2 列和第 3 列:
> myfunc <- function(df, cols){
for(i in cols){
class(df[[i]]) <- as.list( c(class(df[[i]]), as.list("formula")) )
}
return(df)
}
> jnk <- myfunc(jnk, 2:3)
> lapply(jnk, class)
$mpg
[1] "numeric"
$cyl
[1] "numeric" "formula"
$disp
[1] "numeric" "formula"
我怎样才能优雅地做到这一点,也许使用lapply或
purrr
中的类似函数?理想情况下,通过部署一个适用于 DF 和列索引的函数?或者我已经找到了“优雅”的解决方案?
我尝试了以下操作(首先重置
jnk <- mtcars[1:3, 1:3]
),但我显然对其工作原理感到困惑:
> newfunc <- function(df, colnums){
lapply(colnums, function(i) {
class(df[[i]]) <- as.list( c(class(df[[i]]), as.list("formula")) )
}
)
return(df)
}
> jnk <- newfunc(jnk, 2:3)
> lapply(jnk, class)
$mpg
[1] "numeric"
$cyl
[1] "numeric"
$disp
[1] "numeric"
你就快到了。这将显示添加到指定列的公式类:
newfunc <- function(df, colnums) {
lapply(colnums, function(i) {
class(df[[i]]) <- as.list(c(class(df[[i]]), "formula"))
})
return(df)
}
jnk <- newfunc(jnk, 2:3)
lapply(jnk, class)