我正在尝试编写一个函数来删除 R 列中的某个级别
iris_df <- iris
iris_df$Species2 <- iris_df$Species
purrr::map(.x=c("Species","Species2"),variable="setosa", .f=function(x, variable){
levels(iris_df[,x])[levels(iris_df[,x]) == variable] <- NA
})
我可以运行这个,但是当我通过执行来检查级别时,levels(iris_df$Species)
答案是[1] "setosa" "versicolor" "virginica"
我预计该setosa
级别已被删除。任何人都可以更新代码来解决这个问题吗?
函数中执行的代码是该函数的内部代码,全局环境不会改变。如果您想像这样编写具有“副作用”的代码,则需要使用循环
for
,而不是在函数内。如果你想使用,
purrr::map
那么你需要你的函数返回一些有用的东西,并且你需要用<-
or分配结果=
。dplyr::mutate
尽管在修改数据框的列时可能更容易使用:如果您想制作一个更通用的“从列中删除级别”函数,那么我们可以将这些方法中的任何一种包装到一个函数中,但是您需要传入数据框并将结果分配给相同的数据框或新的数据框:
返回列的值而不是
levels
.您可以只
replace
使用NA
和 使用droplevels()
.在哪里