为何R在命令行加载变量为factor,RStudio中却为character?
RStudio与命令行加载CSV后变量类型差异的原因及默认加载为字符型的方法
差异原因
- R原生的
read.csv()函数默认会将字符串列转换为**因子(Factor)**类型,这是R的历史默认行为。 - RStudio的全局或项目设置中默认开启了
stringsAsFactors = FALSE选项,而原生R命令行环境的默认值为TRUE。这一配置差异导致同样的代码在两个环境中读取CSV时,字符串列的类型出现分化:RStudio中为字符(character)型,命令行中为因子型。
标准解决方法
1. 读取时显式指定参数(推荐)
在read.csv()中添加stringsAsFactors = FALSE参数,直接将所有字符串列读取为字符型,无需事后转换:
df = read.csv(path_to_df, sep = ",", header = TRUE, stringsAsFactors = FALSE) samples = df$sample str(samples) # 输出为chr类型
2. 设置全局默认选项
如果希望所有R会话(包括RStudio和命令行)都默认不将字符串转为因子,可以设置全局选项。将以下代码添加到你的.Rprofile文件中(该文件会在R启动时自动执行):
options(stringsAsFactors = FALSE)
之后无论在哪个环境中使用read.csv(),字符串列都会默认是字符型。
3. 使用tidyverse的read_csv()函数
tidyverse生态中的readr包提供的read_csv()函数,默认将字符串列读取为字符型,同时读取速度更快、输出信息更友好:
library(readr) df = read_csv(path_to_df) samples = df$sample str(samples) # 输出为chr类型
内容的提问来源于stack exchange,提问作者je2018
相关产品推荐
相关产品推荐

