[英]R Apply function depending on element in a vector
如何根據向量中的元素選擇函數?
例如向量(a,b,a,b,b)
元素a => x + 2
元素b => y * 3
我正在考慮switch語句,但是不知道這是否是好的R風格。
如果您想使用switch
進行switch
,則可能是這樣
定義switch
功能
Myswitch <- function(x, type) {
switch(type,
"a" = x + 2,
"b" = x * 3)
}
創建一些數據
set.seed(123)
x <- sample(10, 5)
x
## [1] 3 8 4 7 6
您的切換向量
vec <- c("a","b","a","b","b")
使用sapply
對功能進行矢量化實現
sapply(vec, function(y) Myswitch(x, y))
# a b a b b
# [1,] 5 9 5 9 9
# [2,] 10 24 10 24 24
# [3,] 6 12 6 12 12
# [4,] 9 21 9 21 21
# [5,] 8 18 8 18 18
如果要對每個條目使用它(而不是一次用於整個x
),請改用mapply
mapply(Myswitch, x, vec)
## [1] 5 24 6 21 18
我不知道如何添加或增加字符元素,但是也許這會讓您入門。
set.seed(42)
vec1 = c('a','b','a','b','b')
vec2 = runif(length(vec1))
vec3 = sapply(1:length(vec1), function(x){
if (vec1[x] == 'a'){
vec2[x] + 3
}else{
vec2[x] * 3
}
})
編輯 :更快的方法:
vec3 = ifelse(vec1=='a',vec2 + 3, vec2 * 3)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.