【问题标题】:Warning message when using If(...) function in R在 R 中使用 If(...) 函数时的警告消息
【发布时间】:2014-04-09 05:07:53
【问题描述】:

我在使用 R 中的 if 函数时遇到了一些问题。

首先我尝试了这个:

test<-matrix(10,3,3)
if(test[2,2]==10) {test[2,2]<-5}

好的,它正在做我想做的事。所以,我会试试这个:

if(Hylo.Measures[i,3]=="CLc0006x") {Hylo.Measures[i,3]<-"CLc0005x"}

操作!我收到以下消息:

Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "CLc0005x") :
invalid factor level, NA generated

我无法弄清楚这里发生了什么!

我错过了什么明显的步骤?

【问题讨论】:

标签: r if-statement warnings conditional-statements


【解决方案1】:

第三列是因子变量;您可能需要检查您的代码以确保这是您真正想要的。无论如何,如果您确定这是您想要做的,您可以手动添加关卡。这是在iris上添加关卡的示例

R>iris$Species[5] <- "hahah"
Warning message:
In `[<-.factor`(`*tmp*`, 5, value = c(1L, 1L, 1L, 1L, NA, 1L, 1L,  :
  invalid factor level, NA generated

R>levels(iris$Species) <- c(levels(iris$Species), "hahah")
R>iris$Species[5] <- "hahah"
R>iris[5,]
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5            5         3.6          1.4         0.2   hahah

【讨论】:

  • 感谢您的快速回复! :)
【解决方案2】:

您面临的问题是您的真实data.frame 中的字符值被存储为因子,这意味着Hylo.Measures[ ,3] 的元素(至少)仅限于一组离散的级别。 "CLc0005x 不在您的任何行中,因此不是该列的有效级别。

尝试执行str(Hylo.Measures),你就会明白我的意思了。

解决此问题的最简单方法是构建data.frame 而无需观察因素。例如,如果您使用read.table 等,则可以使用参数stringsAsFactors=FALSE,这将确保将所有字符串读入为characters。

我个人在我的 .Rprofile 中设置了 options(stringsAsFactors=FALSE),因为它通常会给我带来痛苦,但这不是最佳做法(尤其是在团队中工作时),因为它可能导致脚本行为不一致。

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2014-05-31
    • 2022-08-20
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    相关资源
    最近更新 更多