R:具有多行的switch语句

use*_*829 2 r switch-statement

在R中:我有一个矩阵,其中一列按8种类型分类:a,b,c,d,e,f,g,h.我需要使用其他列中的数据为每种类型执行不同的计算.我想使用switch()函数来自动循环每种类型,并说明每种类型的差异计算; 但是,我在网上看到的所有内容都只显示了每个交换机的一个线路交换机计算语法的示例.

下面是使用switch()帮助中提供的代码的示例.我知道mean()是一个函数,但是我们只是说这个例子,它不是一个函数,因为我只是想说明我不知道语法(并且我的在线研究中没有明确说明) :

centre <- function(x, type) {
  switch(type,
     mean = {
           total.sum<-sum(type)
           mean = total.sum/length(type)
     },
     median = median(x),
     trimmed = mean(x, trim = .1))
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*son 8

我认为错误的传达来自你的例子中的拼写错误:

 mean = {
       total.sum<-sum(type)
       mean = total.sum/length(type)
 },
Run Code Online (Sandbox Code Playgroud)

应该

 mean = {
       total.sum<-sum(x)
       mean = total.sum/length(x)
 },
Run Code Online (Sandbox Code Playgroud)

如果进行此更改,它的行为与您期望的完全相同.

ETA:我不确定你的评论中的问题是什么.请尝试以下代码:

set.seed(1)

centre <- function(x, type) {
  switch(type,
     mean = {
           total.sum<-sum(x)
           mean = total.sum/length(x)
     },
     median = median(x),
     trimmed = mean(x, trim = .1))
}

x <- rcauchy(10)
print(centre(x, "mean"))
print(centre(x, "median"))
print(centre(x, "trimmed"))
Run Code Online (Sandbox Code Playgroud)

输出是:

[1] -0.4844658
[1] -0.236111
[1] -0.3632328
Run Code Online (Sandbox Code Playgroud)