2015-10-06 65 views
3

數量從georeferred點的給定data.frame我發現在格式化爲一個字符列的座標遵循字符串轉換爲數字限定的十進制數字

"44.524768336 11.4832955249" 
"44.6858512233 11.1698766486" 
"44.498179364 11.6599683838" 

要從I」各行中提取的數值我使用了以下命令(以第一行爲例)。

res <- strsplit(x = "44.524768336 11.4832955249", split = " ", fixed = T) 
res 
[[1]] 
[1] "44.524768336" "11.4832955249" 

as.numeric(res[[1]][1]) 
[1] 44.52477 
as.numeric(res[[1]][2]) 
[1] 11.4833 

在此轉換中,我丟失了6位十進制數字。 有沒有一種方法可以將字符串轉換爲數字來設置小數位數,而無需修改任何R全局設置?

回答

6

你實際上並沒有丟失數字;這是多麼被打印到控制檯:

options(digits = 4) 
R> as.numeric(res[[1]][1]) 
#[1] 44.52 
## 
options(digits = 12) 
R> as.numeric(res[[1]][1]) 
#[1] 44.524768336 

正如大衛Arenburg的評論,你也可以使用print(..., digits = <n>)指出。

+2

或者'print(as.numeric(res [[1]]),digits = 12)',因爲我們在這裏實際處理'print'函數。 –

+1

或'sprintf(「%。10f」,as.numeric(res [[1]] [1])'其中10可以被你希望的多個sig-digits代替 –

+2

'sprintf()'只是把你帶回來 –

0

以客觀,獲得作爲結果的數量,並採用由@nrussell在以前的答案提供的建議(及後續評論)我已經找到了以下解決方案:

string.number <- "44.004768336" 

# Splitting the string in integer and decimal part 
number.part <- strsplit(string.number, ".", fixed = T) 
as.numeric(number.part[[1]][1]) # Integer part 
[1] 44 
as.numeric(number.part[[1]][2]) # Decimal part. Note the effect of the leading zeros 
[1] 4768336 

# saving the current and set the new setting the "digits" option 
getOption(x = "digits") 
[1] 11 
current.n.dgt <- getOption("digits") 
options(digits = 11) 

# Combining integer and decimal in a number saving the required numbers of decimal digits 
integer.part <- as.numeric(number.part[[1]][1]) 
exp.numb <- (trunc(log10(as.numeric(number.part[[1]][2])))+1+(nchar(number.part[[1]][2])-nchar(as.character(as.numeric(number.part[[1]][2]))))) 
decimal.part <- as.numeric(number.part[[1]][2])/(10^exp.numb) 
res.number <- integer.part + decimal.part 
res.number 
[1] 44.004768336 

一個更簡單的方法避免字符串分割如下

getOption("digits") 
[1] 7 
current.n.dgt <- getOption("digits") 

string.number <- "44.004768336" 
options(digits = 11) 
as.numeric(string.number) 
[1] 44.004768336 

options(digits = current.n.dgt) 
getOption("digits") 
[1] 7 
相關問題