匹配任何一组案例的 Switch 语句
Switch statement matching any of a set of cases
举个例子,我在R中有一个switch()
语句来检查一个字母是否是元音字母,如下:
switch(trial_code[i],
'a' = {letter[i] <- 'vowel'
},
'e' = {letter[i] <- 'vowel'
},
'i' = {letter[i] <- 'vowel'
},
'o' = {letter[i] <- 'vowel'
},
'u' = {letter[i] <- 'vowel'
},
{letter[i] <- 'consonant'}
)
我本以为一定有某种方法可以同时检查多个案例,以整理我的代码。我尝试了以下方法,但没有成功:
switch(trial_code[i],
'a' | 'e' | 'i' | 'o' | 'u' = {letter[i] <- 'vowel'
},
{letter[i] <- 'consonant'}
)
根据列表中的任何值检查 switch()
语句的正确语法是什么?
编辑:我应该指出这是一个 MWE。我正在尝试找到针对多个可能的匹配情况使用 switch 语句的问题的解决方案;我并没有尝试在我的实际程序中将字母分配给元音或辅音。
如果您所做的只是一遍又一遍地执行相同的操作,我看不出有任何使用 switch
的理由。您可以使用简单的索引和 %in%
代替。
例如,假设这是您的字母向量
set.seed(123)
(letter <- sample(letters, 20))
# [1] "h" "t" "j" "u" "w" "a" "k" "q" "x" "z" "p" "g" "r" "s" "b" "n" "c" "v" "y" "o"
然后,只需
c('consonant', 'vowel')[(letter %in% c('a', 'e', 'i', 'o', 'u')) + 1]
# [1] "consonant" "consonant" "consonant" "vowel" "consonant" "vowel" "consonant" "consonant"
# [9] "consonant" "consonant" "consonant" "consonant" "consonant" "consonant" "consonant" "consonant"
# [17] "consonant" "consonant" "consonant" "vowel"
switch
的帮助页面介绍了如何执行此操作。
If EXPR
evaluates to a character string then that string is matched (exactly) to the names of the elements in ...
. If there is a match then that element is evaluated unless it is missing, in which case the next non-missing element is evaluated ...
然后继续举一个例子,在你的情况下看起来像
switch(trial_code[i],
'a' = ,
'e' = ,
'i' = ,
'o' = ,
'u' = {letter[i] <- 'vowel'},
{letter[i] <- 'consonant'}
)
这可能是也可能不是解决您的问题的最佳方法,但这是指定多个值以获得相同效果的方法。
举个例子,我在R中有一个switch()
语句来检查一个字母是否是元音字母,如下:
switch(trial_code[i],
'a' = {letter[i] <- 'vowel'
},
'e' = {letter[i] <- 'vowel'
},
'i' = {letter[i] <- 'vowel'
},
'o' = {letter[i] <- 'vowel'
},
'u' = {letter[i] <- 'vowel'
},
{letter[i] <- 'consonant'}
)
我本以为一定有某种方法可以同时检查多个案例,以整理我的代码。我尝试了以下方法,但没有成功:
switch(trial_code[i],
'a' | 'e' | 'i' | 'o' | 'u' = {letter[i] <- 'vowel'
},
{letter[i] <- 'consonant'}
)
根据列表中的任何值检查 switch()
语句的正确语法是什么?
编辑:我应该指出这是一个 MWE。我正在尝试找到针对多个可能的匹配情况使用 switch 语句的问题的解决方案;我并没有尝试在我的实际程序中将字母分配给元音或辅音。
如果您所做的只是一遍又一遍地执行相同的操作,我看不出有任何使用 switch
的理由。您可以使用简单的索引和 %in%
代替。
例如,假设这是您的字母向量
set.seed(123)
(letter <- sample(letters, 20))
# [1] "h" "t" "j" "u" "w" "a" "k" "q" "x" "z" "p" "g" "r" "s" "b" "n" "c" "v" "y" "o"
然后,只需
c('consonant', 'vowel')[(letter %in% c('a', 'e', 'i', 'o', 'u')) + 1]
# [1] "consonant" "consonant" "consonant" "vowel" "consonant" "vowel" "consonant" "consonant"
# [9] "consonant" "consonant" "consonant" "consonant" "consonant" "consonant" "consonant" "consonant"
# [17] "consonant" "consonant" "consonant" "vowel"
switch
的帮助页面介绍了如何执行此操作。
If
EXPR
evaluates to a character string then that string is matched (exactly) to the names of the elements in...
. If there is a match then that element is evaluated unless it is missing, in which case the next non-missing element is evaluated ...
然后继续举一个例子,在你的情况下看起来像
switch(trial_code[i],
'a' = ,
'e' = ,
'i' = ,
'o' = ,
'u' = {letter[i] <- 'vowel'},
{letter[i] <- 'consonant'}
)
这可能是也可能不是解决您的问题的最佳方法,但这是指定多个值以获得相同效果的方法。