31

我有一个函数,我在其中定义了一个data.frame我使用循环填充数据的函数。在某些时候,我收到警告消息:

警告消息: 1: In [<-.factor( *tmp*, iseq, value = "CHANGE") : 无效因子水平,生成 NA

因此,当我定义我的 data.frame 时,我想将选项设置stringsAsFactorsFALSE但我不明白该怎么做。

我努力了:

DataFrame = data.frame(stringsAsFactors=FALSE)

并且:

options(stringsAsFactors=FALSE)

设置 stringsAsFactors 选项的正确方法是什么?

4

1 回答 1

41

这取决于您如何填充数据框,而您没有提供任何代码。当你构建一个新的数据框时,你可以这样做:

x <- data.frame(aName = aVector, bName = bVector, stringsAsFactors = FALSE)

在这种情况下,如果egaVector是字符向量,那么数据框列x$aName也将是字符向量,而不是因子向量。将其与现有数据框(使用rbindcbind类似)结合应该保留该模式。

当你执行

options(stringsAsFactors = FALSE)

您更改全局默认设置。因此,您在执行该行后创建的每个数据框都不会自动转换为因子,除非明确告知这样做。如果您只需要避免在单个位置进行转换,那么我宁愿不更改默认值。但是,如果这会影响代码中的许多地方,那么更改默认值似乎是个好主意。

还有一件事:如果您的向量已经包含因子,那么以上都不会将其更改回字符向量。为此,您应该使用as.character或类似方法将其显式转换回来。

于 2012-07-18T09:59:19.533 回答