2014-04-23 32 views
0

我做了這個功能,將所有9個或更少轉換爲一個詞,也將通過插入一個逗號格式化大量的字符和格式:將數字轉換到

library(english); library(stringr) 

reportNumber <- function (number) { 
    ifelse(number > 9, str_trim(format(number, big.mark= ",", scientific = F)), as.character(english(number))) 
} 

功能的工作原理是這樣的:

reportNumber(c(0, 9, 10, 100, 1000, 10000)) 

# [1] "zero" "nine" "10"  "100" "1,000" "10,000" 

但如果數有一個小數點,函數錯誤:

reportNumber(c(0.1, 9.1, 10.1, 100.1, 1000.1, 10000.1)) 

我需要個e函數測試一個數字是否有小數點,如果是true,則只打印未格式化的數字。所以輸出應該簡單地:

c(0.1, 9.1, 10.1, 100.1, 1000.1, 10000.1) 

# [1]  0.1  9.1 10.1 100.1 1000.1 10000.1 
+0

'grepl(「。」,number),...)'可能適用於該問題。或者可能'is.double' –

+0

沒有工作對不起 – luciano

+0

理查德的基本想法很好,但'.'是正則表達式中的一個特殊字符。您可能需要在'grepl'中指定'fixed = TRUE'。 – joran

回答

1

你提的問題基本上可以歸結爲檢查是否一個數是一個整數,它已經在SO解決before。您可以嘗試:

reportNumber <- function (number) { 
    ifelse(number %% 1 != 0, as.character(number), 
     ifelse(number > 9, 
       str_trim(format(number, big.mark= ",", scientific = F)), 
       as.character(english(number)))) 
} 
reportNumber(c(0, 9, 10, 100, 1000, 10000)) 
# [1] "zero" "nine" "10"  "100" "1,000" "10,000" 
reportNumber(c(0.1, 9.1, 10.1, 100.1, 1000.1, 10000.1)) 
# [1] "0.1"  "9.1"  "10.1" "100.1" "1000.1" "10000.1"