变量的无效类型(列表)
invalid type (list) for variable
我正在尝试 运行 R 中的方差分析模型。我有一个包含 3 行和 12 列的数据文件。每行都是解释变量特定水平的数据。单元格 [i,j] 是级别 i 的第 j 个响应。该文件是“.dat”扩展名。我正在 运行 宁以下 R 代码试图获得一个 36 x 2 数据帧到 运行 anova 模型而不是 3 x 12 原始数据帧:
data <- read.table("usedcar.dat", row.names = 1)
young <- data[1,]
med <- data[2,]
old <- data[3,]
Price <- c(young, med, old)
Age <- as.factor(c(rep(1,12), rep(2,12), rep(3,12)))
data <- cbind(Age, Price)
data <- as.data.frame(data)
但是当我尝试从中获取 anova 模型时,出现了无效列表类型错误:
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'
我在这里做错了什么?
这里是一个随机矩阵,如果有帮助的话:
replicate(12, rnorm(3))
这是 str(data) 结果:
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
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)
来自 lm
或其他基于公式的函数的错误消息 invalid type (list) for variable x
通常表示变量 x
需要一个向量,而不是一个列表。调试错误的标准模型是检查 str(data_frame_name$x)
的结果(其中 data_frame_name
是包含 x 的数据框)。通常,您会发现 x
不是您期望的数据类型。
我正在尝试 运行 R 中的方差分析模型。我有一个包含 3 行和 12 列的数据文件。每行都是解释变量特定水平的数据。单元格 [i,j] 是级别 i 的第 j 个响应。该文件是“.dat”扩展名。我正在 运行 宁以下 R 代码试图获得一个 36 x 2 数据帧到 运行 anova 模型而不是 3 x 12 原始数据帧:
data <- read.table("usedcar.dat", row.names = 1)
young <- data[1,]
med <- data[2,]
old <- data[3,]
Price <- c(young, med, old)
Age <- as.factor(c(rep(1,12), rep(2,12), rep(3,12)))
data <- cbind(Age, Price)
data <- as.data.frame(data)
但是当我尝试从中获取 anova 模型时,出现了无效列表类型错误:
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'
我在这里做错了什么?
这里是一个随机矩阵,如果有帮助的话:
replicate(12, rnorm(3))
这是 str(data) 结果:
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
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)
来自 lm
或其他基于公式的函数的错误消息 invalid type (list) for variable x
通常表示变量 x
需要一个向量,而不是一个列表。调试错误的标准模型是检查 str(data_frame_name$x)
的结果(其中 data_frame_name
是包含 x 的数据框)。通常,您会发现 x
不是您期望的数据类型。