2013-03-12 148 views
1

我是R新手,正在嘗試運行迴歸分析。我用c()函數構造了任意向量來學習繪圖,lm,fit,abline和彙總函數。這工作正常,但當試圖迴歸導入的數據時,我收到以下錯誤消息。我不知道是什麼原因導致錯誤或如何修復它。任何想法?謝謝。新R用戶有迴歸問題

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文件,這是我特別不希望做B/C .xlsx文件總數我有,我仍然有相同的繪圖錯誤,但尺寸似乎是正確的。在這個例子中,行數和列數分別在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 
+0

請讓您的情況具有可重複性,即向我們提供模擬您的情況所需的數據和代碼。有關如何執行此操作的更多提示,請參閱http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example。 – EDi 2013-03-12 14:02:36

+0

>此外,尺寸不正確。 .xlsx文件有1列,150行,並且沒有標題。 EDi 2013-03-12 14:03:52

回答

1

Furthermore, the dimension is incorrect. The .xlsx file has 1 column, 150 rows, and no 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對象類型。

+1

解決方案:在使用繪圖函數之前,OP應該用'X < - unlist(X)'將數據幀轉換爲矢量。 – 2013-03-12 14:16:20

+0

感謝您的回覆。我仍在研究並編寫我的後續問題。現在迴歸似乎正在運行。 – 2013-03-14 14:49:28

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轉換成數字型(即相同的對象上面的固定代碼排序對象爲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) 

或者你可以訪問,當你調用plot

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

見的幫助文件是什麼所有這些功能返回data.frame的第一列(例如?as.numeric?unlist?names等)並且還查看?class,?mode?typeof查詢對象屬性。