2013-01-03 14 views
1

我正在使用包fields進行空間分析。封裝字段中R Krig函數的錯誤

我的數據集是如下:

   x  y 
Kopenhagen 12,57 55,68 
Rotterdam 4,48 51,92 
Belgrade 20,46 44,82 
Budapest 19,04 47,5 
Dublin  -6,27 53,34 
Rome  12,48 41,89 
Lisbon  -9,14 38,71 
Bucharest 26,1 44,45 
Madrid  -3,7 40,42 
Lausanne  6,63 46,52 
London  -0,13 51,5 
Kiel  10,13 54,33 
Augsburg 10,89 48,36 
Innsbruck 11,398 47,25 
Helsinki 24,94 60,17 
Lyon   4,83 45,77 
Ngreece  22,5 41,5 
Ancona  13,11 43,37 
Forde   5,9 61,44 
Warsawa  21,01 52,23 
Uppsala  17,64 59,86 
Barcelona 2,17 41,38 
Prague  14,42 50,09 

這是

dput(map) 

structure(list(x = structure(c(6L, 18L, 11L, 10L, 21L, 5L, 23L, 
16L, 17L, 22L, 1L, 2L, 3L, 4L, 15L, 19L, 14L, 7L, 20L, 12L, 9L, 
13L, 8L), .Label = c("-0,13", "10,13", "10,89", "11,398", "12,48", 
"12,57", "13,11", "14,42", "17,64", "19,04", "20,46", "21,01", 
"2,17", "22,5", "24,94", "26,1", "-3,7", "4,48", "4,83", "5,9", 
"-6,27", "6,63", "-9,14"), class = "factor"), y = structure(c(20L, 
16L, 8L, 12L, 18L, 5L, 1L, 7L, 2L, 10L, 15L, 19L, 13L, 11L, 22L, 
9L, 4L, 6L, 23L, 17L, 21L, 3L, 14L), .Label = c("38,71", "40,42", 
"41,38", "41,5", "41,89", "43,37", "44,45", "44,82", "45,77", 
"46,52", "47,25", "47,5", "48,36", "50,09", "51,5", "51,92", 
"52,23", "53,34", "54,33", "55,68", "59,86", "60,17", "61,44" 
), class = "factor")), .Names = c("x", "y"), class = "data.frame", row.names=       
c("Kopenhagen","Rotterdam", "Belgrade", "Budapest", "Dublin", "Rome", "Lisbon", 
"Bucharest", "Madrid", "Lausanne", "London", "Kiel", "Augsburg", 
"Innsbruck", "Helsinki", "Lyon", "Ngreece", "Ancona", "Forde", 
"Warsawa", "Uppsala", "Barcelona", "Prague")) 

[1] 97.11559 59.86429 25.85145 54.56235 86.00903 17.45889 81.48449 
[8] 87.57361 68.49520 44.40894 106.80953 67.36760 77.33586 47.96955 
[15] 35.00993 75.26571 43.15965 17.55405 65.85301 46.19634 126.52848 
[22] 42.26424 53.29187 

稱爲map和第二稱爲sigma的第一數據集的輸出。

我寫這篇文章的代碼:

fit<-Krig(map, sigma, theta=100) 

,但它給了我下面的錯誤:

Error in signif(mat, digits) : 
    Non-numeric argument to mathematical function 

我不明白的地方,我錯了,因爲我的數據集的組織看起來一樣。在字段包手冊。

任何幫助,高度讚賞。

+0

「map」有問題,請用'dput(map)'的輸出更新您的問題。 – Julius

回答

0

錯誤是因爲您的列x和y是因子。您必須將因子轉換爲大約其原始數值。

map$x <- as.numeric(gsub(",",".", map$x)) 
map$y <- as.numeric(gsub(",",".", map$y)) 
Krig(map, sigma, theta=100) 
Call: 
Krig(x = dat2, Y = sigma, theta = 100) 

Number of Observations:    23  
Number of parameters in the null space 3  
Parameters for fixed spatial drift  3  
Model degrees of freedom:    19.2 
Residual degrees of freedom:   3.8 
GCV estimate for sigma:    9.943 
MLE for sigma:       8.931 
MLE for rho:       8808 
lambda         0.0091 
User rho        NA  
User sigma^2       NA  

我不知道您是如何讀取地圖結構的,但是如果您將它讀作數字,則可以輕鬆避免該轉換。例如:

map <- read.table(files,sep=',') 
+0

非常感謝。現在我明白了什麼是問題。所以,我需要將數據集中的逗號更改爲點,然後才能在R中處理它們? – Homap

+0

@agstudy OP不需要替換,因爲他使用了一些歐元語言環境(「。」和「」,「),我認爲是小數點分隔符。與往常一樣,警告:'as.numeric(as.character(my_factors))'更安全。 R-FAQ 7.10 –

+1

@CarlWitthoft你是對的!但'as.numeric(as.character(my_factors))'不適合我。我認爲他必須通過讀數字而不是數字來避免轉換。 – agstudy