R 创建使用列索引向量将因子转换为字符串的函数

R 创建使用列索引向量将因子转换为字符串的函数,r,string,function,R,String,Function,我想将df中的许多列从factor转换为character。我编写了如下代码: ColumnsToStrings <- c(2,5,6,25) for (column in ColumnsToStrings){ df[column] <- lapply(df[column], as.character) } ColumnsToStrings <- c(2,5,6,25) df <- ConvertColumnToString(df,Colum

我想将df中的许多列从factor转换为character。我编写了如下代码:

ColumnsToStrings <- c(2,5,6,25)

  for (column in ColumnsToStrings){
    df[column] <- lapply(df[column], as.character)

  }
ColumnsToStrings <- c(2,5,6,25)    
df <- ConvertColumnToString(df,ColumnsToStrings)

ColumnsToStrings循环在函数中似乎是多余的,只需执行以下操作:

df <- mtcars[1:6]  # example, all numeric

ConvertColumnToString <- function(df, ColumnsToStrings) {
  df[ColumnsToStrings] <- lapply(df[ColumnsToStrings], as.character)
  return(df)
}

ColumnsToStrings <- c(2, 5, 6, 25)

res <- ConvertColumnToString(df, ColumnsToStrings)
sapply(res, class)
#       mpg         cyl        disp          hp        drat          wt 
# "numeric" "character"   "numeric"   "numeric" "character" "character" 

循环在您的函数中似乎是多余的,只需执行以下操作:

df <- mtcars[1:6]  # example, all numeric

ConvertColumnToString <- function(df, ColumnsToStrings) {
  df[ColumnsToStrings] <- lapply(df[ColumnsToStrings], as.character)
  return(df)
}

ColumnsToStrings <- c(2, 5, 6, 25)

res <- ConvertColumnToString(df, ColumnsToStrings)
sapply(res, class)
#       mpg         cyl        disp          hp        drat          wt 
# "numeric" "character"   "numeric"   "numeric" "character" "character" 

出于兴趣,为什么我的版本会删除数据?@PaulBarr当然,请参见编辑。我还在我的版本的输出(虽然不是绝对必要的)周围包装了一个
return
,以使其清晰明了。非常感谢。为什么它在你的例子中不是必需的,但在我的例子中却是必需的?@PaulBarr这是必需的,看,我的意思是,在这个位置也可以只写
df
而不是
return(df)
。看。出于兴趣,为什么我的版本要删除数据?@PaulBarr当然,请看编辑。我还在我的版本的输出(虽然不是绝对必要的)周围包装了一个
return
,以使其清晰明了。非常感谢。为什么它在你的例子中不是必需的,但在我的例子中却是必需的?@PaulBarr这是必需的,看,我的意思是,在这个位置也可以只写
df
而不是
return(df)
。看见
ConvertColumnToString <- function (df, VectorOfColumns) {
  for (column in VectorOfColumns ) {
    df[column] <- lapply(df[column], as.character)
  }
  return(df)
}
res2 <- ConvertColumnToStringV1(df, ColumnsToStrings)
sapply(res2, class)
#       mpg         cyl        disp          hp        drat          wt 
# "numeric" "character"   "numeric"   "numeric" "character" "character"