我可以使用 lapply 或类似的函数将类添加到数据框的选定列吗?

问题描述 投票:0回答:1

这个数据框

> 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"
class lapply purrr
1个回答
0
投票

你就快到了。这将显示添加到指定列的公式类:

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)
© www.soinside.com 2019 - 2024. All rights reserved.