1

我是 R 新手,正在尝试进行回归分析。我用 c() 函数构造了任意向量来学习绘图、lm、拟合、abline 和汇总函数。这工作正常,但在尝试回归导入的数据时,我收到以下错误消息。我不知道是什么导致了错误或如何解决它。任何想法?谢谢。

library(xlsx)  
Loading required package: xlsxjars   
Loading required package: rJava    
x <- "~/Desktop/x.xlsx"    
y <- "~/Desktop/y.xlsx"   
X <- read.xlsx(x,1)  
Y <- read.xlsx(y,1)  
dim(X)  
[1] 149   1  
dim(Y)  
[1] 149   1  
plot(X,Y)  
Error in stripchart.default(x1, ...) : invalid plotting method  
plot(X)  
plot(Y)

另外,我认为我不理解 read.xlsx 函数中接受的所有参数。例如,如果 sheetindex 旨在为工作表编制索引,那么在此示例中,x 不是 1,y 不是 2?但是之后:

X <- read.xlsx(x,1)  
Y <- read.xlsx(y,2)   
Error in sheets[[sheetIndex]] : subscript out of bounds

此外,尺寸不正确。.xlsx 文件有 1 列、150 行,并且没有标题。

dim(X)   
[1] 149   1

当转换为 .csv 文件时,我并不特别想对我拥有的 .xlsx 文件总数进行 b/c 处理,我仍然有相同的绘图错误,但尺寸似乎是正确的。在此示例中,行数和列数分别保持不变,分别为 1 和 150,但有一个标题。

x <- "~/Desktop/x.csv"   
y <- "~/Desktop/y.csv"   
X <- read.table(x, header = T)    
Y <- read.table(y, header = T)    
plot(X,Y)    
Error in stripchart.default(x1, ...) : invalid plotting method    
dim(X)   
[1] 150   1   
4

2 回答 2

3

问题是 X 和 Y 是称为数据帧(?data.frame详细信息)的对象,而不是向量。plot 函数实际上是一系列其他特定于对象的绘图函数的包装器,在这种情况下,它试图使用 绘图stripchart(),这导致了问题。这会重现问题并修复它:

X=data.frame(x=1:100)
Y=data.frame(y=rnorm(100,mean=1:100,sd=5))
plot(X,Y)
names(X)
names(Y)
plot(X$x, Y$y)

假设您的数据始终只包含一列,您可以通过将 data.frame 转换为 numeric 类型的对象(即与 相同类型的对象X=c(1,2,3,5))来修复上面的代码,这可以通过多种方式完成

X <- unlist(read.xlsx(x,1))
Y <- unlist(read.xlsx(y,1))

或者,或者,最好只是 havie read.xlsx() 返回一个列表而不是 data.frame

X <- read.xlsx(x,1, as.data.frame=FALSE)
Y <- read.xlsx(y,1, as.data.frame=FALSE)

或者您可以在调用时访问 data.frame 的第一列plot

plot(X[,1], Y[,1])

请参阅帮助文件了解所有这些函数返回的内容(例如?as.numeric?unlist?names等),另请参阅和?class查询对象属性。?mode?typeof

于 2013-03-12T14:18:43.093 回答
1

Furthermore, the dimension is incorrect. The .xlsx file has 1 column, 150 rows, and no header.

Header 默认为 TRUE,因此您应该在 read.xlsx 调用中指定它。

X <- read.xlsx(x,1, header = TRUE)

关于情节错误:

plot(X,Y)  
Error in stripchart.default(x1, ...) : invalid plotting method 

read.xlsx 返回 data.frames,这就是错误出现的原因。这是一个例子:

X <- data.frame(rnorm(150))
Y <- data.frame(rnorm(150))
plot(X, Y)

# Error in stripchart.default(x1, ...) : invalid plotting method

请仔细阅读 read.xlsx 文档和 R 对象类型。

于 2013-03-12T14:08:59.863 回答