与矩阵/数据帧和所有内容相同的问题...... 这次我尝试做散点图。我很确定我能够做到这一点,但不幸的是,同样的问题总是被看到。
这是我的数据:
id cond S1.pre S2.pre S1.post S2.post V1.pre V2.pre V1.post V2.post
1 aer 21 31 25 35 7 1 19 4
2 aer 15 26 21 29 13 11 16 14
3 aer 18 27 23 31 8 2 3 3
4 aer 17 31 18 39 13 11 15 14
5 aer 15 26 16 29 26 15 32 20
使用该函数读取txt文件:
data <- read.table("Stats1.13.HW.03.txt", header=T)
> class("data")
[1] "character"
^奇怪?
试图绘制它:
plot(data2$S1.pre~data2$S2.pre~data2$V1.pre~data2$V2.pre, col="green")
Error in (function (formula, data = NULL, subset = NULL, na.action = na.fail, :
object is not a matrix
哦,这不是问题。让我做一个矩阵!
data <- as.matrix(data)
惊喜?
plot(data $ S1.pre~data $ S2.pre~data $ V1.pre~data $ V2.pre,col =“green”)
Error in data$V2.pre : $ operator is invalid for atomic vectors
如何用矩阵/原子矢量/数字等解决我的问题...
答案 0 :(得分:2)
首先class("data")
表示'给我一类“数据”字符串',它符合预期character
。您应该使用class(data)
代替。
您的代码中没有data2
因此不清楚此对象中的内容。我们假设我们使用data
。
您尝试绘制像此data$S1.pre ~ data$S2.pre ~ data$V1.pre ~ data$V2.pre
这样的公式,它甚至不接近有效的公式。
如果要创建多个散点图,可以使用pairs
pairs(~data$S1.pre + data$S2.pre + data$V1.pre + data$V2.pre)
修改强>
如果您有矩阵,则无法使用$
表示法来访问列,但您可以使用如下语法:
data[, V1.pre]
您还应该记住,矩阵中的所有字段必须是相同的类型,因此在您的情况下,所有值都将转换为字符:
> apply(as.matrix(data[1,]), 2, class)
id cond S1.pre S2.pre S1.post S2.post
"character" "character" "character" "character" "character" "character"
V1.pre V2.pre V1.post V2.post
"character" "character" "character" "character"
如果您想要数字,则应省略cond
列:
> data.matrix <- (data[, -2])
> apply(data.matrix, 2, class)
id S1.pre S2.pre S1.post S2.post V1.pre V2.pre V1.post
"integer" "integer" "integer" "integer" "integer" "integer" "integer" "integer"
V2.post
"integer"