2012-06-26 2 views
2

В R: У меня есть матрица с одним столбцом, разделенная на 8 типов: a, b, c, d, e, f, g, h. Мне нужно сделать разные вычисления для каждого типа, используя данные в других столбцах. Я хочу использовать функцию switch() для автоматизации цикла через каждый тип и указать разностные вычисления для каждого типа; ОДНАКО, все, что я вижу в Интернете, показывает только примеры синтаксиса для вычисления одной строки для каждого коммутатора.R: оператор 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)) 
} 
+3

Там есть несколько способов сделать это. Возможно, если бы вы расширили свой вопрос, желательно с воспроизводимым примером, мы могли бы помочь. –

+3

На это будет гораздо больше шансов получить ответ, если вы обеспечите что-то воспроизводимое и ваши усилия по решению. – mnel

+3

Просто используйте фигурные скобки '{...}', чтобы обернуть несколько строк кода для каждого оператора. – Andrie

ответ

7

Я думаю, что недопонимание исходит из опечатка в вашем примере:

mean = { 
     total.sum<-sum(type) 
     mean = total.sum/length(type) 
}, 

должен быть

mean = { 
     total.sum<-sum(x) 
     mean = total.sum/length(x) 
}, 

Если вы сделаете это изменение, он ведет себя точно так, как вы чюо uld ожидают этого.

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")) 

Выход:

[1] -0.4844658 
[1] -0.236111 
[1] -0.3632328 
+0

Ну, синтаксис все же должен быть неправильным, потому что, когда я запускаю код с этой коррекцией, а затем использую fucntion, я получаю следующее: 'x <- rcauchy (10) > center (x, "mean") > центр (x, "срединный") [1] 0.3268971 > центр (x, "подрезанный") [1] 1.677625 ' – user1481829

+0

См. edit для воспроизводимого примера; и дайте мне знать, если это не сработает. –

+0

По какой-то причине, когда я сделал исправление (которое я пытался показать путем вложения кода, и сайт не позволил бы мне попасть в него, не отправив его). Проблема, с которой я столкнулась, заключалась в том, что она не давала результата. Поскольку вы показали мне свое, и я побежал, проблема, похоже, решена. БЛАГОДАРЯ! – user1481829

Смежные вопросы