2015-07-20 39 views
-1

我試圖墊向量的每一個元素用「0」,使得該最大寬度爲3- [R程序,用0,最大寬度墊字符數= 3

實施例:

  • 0變爲000
  • 12變成012
  • 100保持100

下面是代碼

myvector <- c("2", "3", "33", "90", "120") 
newvector <- lapply(myvector,formatC(width=3, format="s", flag="0")) 

當我使用lapply,我得到錯誤

Error in formatC(width = 3, format = "s", flag = "0") : 
    argument "x" is missing, with no default 

,因爲我在lapply使用它這是沒有意義的,而且lapply第一個參數是myvector

+0

這是用於Coursera R編程課程嗎?如果是這樣,或者對於未來的搜索者來說最終結果是:而不是填充,嘗試使用'list.files()',然後使用'read.csv()''lapply()'來讀取該目錄中的文件_all_。 SO上的這部分任務有很多方法。 –

+0

@SamFirke是的,coursera ...你怎麼猜?我只是研究一般的想法,而不是使用實際的問題....最終我需要在執行'read.csv()'之前追加文件擴展名。感謝指針,儘管...... – Rhonda

回答

3

您需要將向量的每個元素傳遞給formatC(你還需要將它們作爲數字得到0填充):

myvector <- c("2", "3", "33", "90", "120") 
newvector <- lapply(myvector, function(x) formatC(as.numeric(x), width=3, flag="0")) 
newvector 
# [[1]] 
# [1] "002" 
# 
# [[2]] 
# [1] "003" 
# 
# [[3]] 
# [1] "033" 
# 
# [[4]] 
# [1] "090" 
# 
# [[5]] 
# [1] "120" 

如果你想要一個向量而不是列表,您可以使用sapply而不是lapply

+0

這可行,但請解釋爲什麼。當我進入sapply幫助頁面時,它給出了sapply(X,FUN,...,simplify = TRUE,USE.NAMES = TRUE)的格式。 'function(x)'在哪裏適合?我明白'as.numeric(x)'將成爲輸出。請澄清。 – Rhonda

+0

不錯,我從來沒有想過爲這個問題使用'formatC',我總是做一些'substr(paste0(「000」,x),nchar(x)-2,nchar(x)'''''''''' – MichaelChirico

+0

@SohniMahiwal'FUN'參數需要傳遞一個函數,所以我們把它傳遞給'function(x)formatC(as.numeric(x),width = 3,flag =「0 「)',這是一個函數,它接受一個名爲'x'的參數並調用'formatC',只需運行'formatC(」2「,width = 3,flag =」0「)''formatC(2 ,width = 3,flag =「0」)'你應該能夠弄清楚爲什麼我們需要將「2」轉換爲2. – josliber