无法创建 for 循环以将多个变量转换为 as.factor

Unable to create a for loop to convert multiple varialbe into as.factor

我正在尝试在 r 中编写一个 for 循环,以将 r 中具有相似字符模式的多个变量转换为 as.factor

下面是我写的函数,R运行代码,没有显示任何错误,但是没有给出想要的输出。有逻辑错误,谁能帮我改正这个错误?

for (i in grep(pattern = "hml35_", x=tanre)) 
{
    tanre$i<-as.factor(tanre$i)
}

假设 grep 模式 returns 列名,您需要更改语法:

for (i in grep(pattern = "hml35_", x=tanre)) 
{
    tanre[[i]]<-as.factor(tanre[[i]])
}
当您使用 $ 运算符时,

R 需要文字列名称。

编辑:您可以在此处使用 lapply 而不是循环。我也会看看使用 mutate across.

编辑 2:

根据要求,您可以通过以下方式做到这一点 lapply:

# Create some data
tanre  <- data.frame(
    id = c(1:12),
    hml35_a  = rep(c("a", "b", "c"), 4),
    hml35_b = rep(c("a", "b", "c"), 4)
)

sapply(tanre, class)
#          id     hml35_a     hml35_b
#   "integer" "character" "character" 

# Make factor
tanre[grep("hml35_", names(tanre))]  <- lapply(tanre[grep("hml35_", names(tanre))], as.factor)

sapply(tanre, class)
#        id   hml35_a   hml35_b
# "integer"  "factor"  "factor"

tidyverse 的解决方案

library(tidyverse)

tanre %>%
  mutate_at(vars(contains("hml35_")), as.factor)