【发布时间】:2016-10-28 20:03:08
【问题描述】:
我正在循环内创建一个数字和字符列表,并将该列表分配给数据框。我已经事先定义了每个变量,并且我没有使用因子(至少我是这样认为的)。基本上,我想用我提到的变量创建一个数据框。这是我正在尝试使用的代码:
NumToShow = numeric(0)
MatToShow = character()
flag = numeric(0)
datalist = data.frame(NumToShow,MatToShow,flag)
for (i in 1:3){
NumToShow = i
MatToShow = "aaa"
flag = i^2
Row_i = list(NumToShow,MatToShow,flag)
# Combining all the data
datalist[i,] = Row_i
}
我收到错误消息:
In `[<-.factor`(`*tmp*`, iseq, value = "aaa") :
invalid factor level, NA generated
我不确定我为什么会得到它。任何帮助将不胜感激。如果这是愚蠢的事情,我很抱歉。谢谢你:)
【问题讨论】:
-
这更多的是警告而不是错误。在
datalist中,MatToShow是一个因素。在循环期间,您为其分配值,这些值不是levels(MatToShow)的元素。这些值变为NA。解决方案:将值添加到levels(MatToShow)或使用 character 向量而不是 factors,例如通过指定data.frame(NumToShow,MatToShow,flag, stringsAsFactors=FALSE). -
这是一种将数据逐行添加到 data.frame 中的非常糟糕的模式。在这个简单的例子中你可以做
data.frame(NumToShow=1:3, MatToShow="aaa", flag=(1:3)^2)。但最好描述一下你真正想做的事情。 R中可能有更好的方法 -
?data.frame,然后查看参数stringsAsFactors。我自己也经常犯同样的错误。 -
Flick 先生,我将创建另一个帖子并准确解释我想要做什么。感谢您的建议
标签: r list dataframe error-handling