在前幾篇我們使用lapply來設定耶蘭提爾王國的分佈
先前有提到過當我們使用了lapply所有的output也就是結果將一定會是list
list能將所有不同的資料類型存起來。但問題來了假設所有的資料都是同一種數值呢?
是否就不需要將數據再轉換成list了呢?
因此當我們為了將數值變成向量,我們就要運用unlist的功能來做資料轉換
以下就是之前資料的做法
耶蘭提爾王國 <- c("耶·蘭提爾", "卡恩村", "卡茲平原", "都武大森林", "八本指")
王國字元 <- lapply(耶蘭提爾王國, nchar)
str(王國字元)
List of 5
$ : int 5
$ : int 3
$ : int 4
$ : int 5
$ : int 3
王國字元
[[1]]
[1] 5
[[2]]
[1] 3
[[3]]
[1] 4
[[4]]
[1] 5
[[5]]
[1] 3
unlist(lapply(耶蘭提爾王國, nchar))
[1] 5 3 4 5 3
但是否有更快的方式來處理資料呢?
這時候我們就可以運用到lapply的兄弟sapply
當我們直接將數據帶入sapply裡面,名字將自動帶入
R也直接幫我們unlist了
sapply(耶蘭提爾王國, nchar)
耶·蘭提爾 卡恩村 卡茲平原 都武大森林 八本指
5 3 4 5 3
這邊要注意我們同樣也可以將names移除,而預設的是保留names
因此這邊可以用USE.NAMES = FALSE來輸入指令
sapply(耶蘭提爾王國, nchar, USE.NAMES = FALSE)
[1] 5 3 4 5 3
這邊有組武器購買數據清單,看來戰火是無法避免了
我們將數據做成list的方式
BOW <- c(20, 30, 25, 21, 28)
SWORD <- c(29, 38, 30, 33, 32)
SPEAR <- c(23, 20, 25, 21, 19)
ARMOR <- c(42, 50, 40, 44, 48)
POTION <- c(39, 35, 33, 37, 30)
price <- list(BOW, SWORD, SPEAR, ARMOR, POTION)
names(price) <- c("BOW", "SWORD", "SPEAR", "ARMOR", "POTION")
price
$`BOW`
[1] 20 30 25 21 28
$SWORD
[1] 29 38 30 33 32
$SPEAR
[1] 23 20 25 21 19
$ARMOR
[1] 42 50 40 44 48
$POTION
[1] 39 35 33 37 30
接著我們透過前面學的function函式來設定最便宜的價格及最貴的價格來做比較
最後再利用剛學到的sapply來帶入數據
extremes_price <- function(x) {
c(min = min(x), max = max(x))
}
sapply(price, extremes_price)
BOW SWORD SPEAR ARMOR POTION
min 20 29 19 40 30
max 30 38 25 50 39
我們將數據帶成了矩陣的模式了,資料也更容易辨識了