变量的类型(列表)无效

时间:2017-11-05 21:19:16

标签: r anova

我正在尝试在R中运行anova模型。我有一个包含3行12列的数据文件。每行是解释变量的特定级别的数据。 Cell [i,j]是级别i的第j个响应。该文件是" .dat"延期。我正在运行以下R代码以尝试获得36 x 2数据帧来运行anova模型而不是3 x 12原始数据框:

m1 <- aov(Price ~ Age, data = data)
Error in model.frame.default(formula = Price ~ Age, data = data, drop.unused.levels = TRUE) : invalid type (list) for variable 'Price'

但是当我尝试从中获取anova模型时,我得到了无效的列表类型错误:

replicate(12, rnorm(3))

我在这里做错了什么?

这是一个随机矩阵,如果这会有所帮助:

str(data)
'data.frame':   36 obs. of  2 variables:
 $ Age  :List of 36
  ..$ 1 : int 1
  ..$ 2 : int 1
  ..$ 3 : int 1
  ...
  ..$ 36: int 3
 $ Price:List of 36
  ..$ 1 : int 2300
  ...
  ..$ 36: int 2075

这是str(数据)结果:

mysite.com/map/cell/3/7

2 个答案:

答案 0 :(得分:11)

tl; dr 数据帧行是列表,而不是数字向量。当你read.table()得到一个数据框时(如我之前所做的那样构造矩阵,不会复制问题)。

data <- as.data.frame(matrix(rnorm(36),nrow=3))
young <- data[1,]; med <- data[2,]; old <- data[3,]
Price <- c(young, med, old)
str(Price)
## ## List of 36
## ##  $ V1 : num 0.648
## ##  $ V2 : num 0.157
## ## ...

这是一个列表,而不是数字向量,这是一个问题。 有多种方法可以解决这个问题。最简单的是unlist()

dd <- data.frame(Age,Price=unlist(Price))
aov(Price~Age,dd)

答案 1 :(得分:2)

来自invalid type (list) for variable x或其他基于公式的函数的错误消息lm通常表示变量x期待向量,而是列表。用于调试错误的标准模型是检查str(data_frame_name$x)的结果(其中data_frame_name是包含x的数据框)。通常,您会发现x并不是您期望的数据类型。