Простые и короткие операторы if для операторов объединения - PullRequest
0 голосов
/ 19 марта 2010

ИСТИНА / ЛОЖЬ, если предложения легко и быстро выполняются в R. Однако, если аргумент становится более сложным, он также очень скоро становится уродливым.

Например: Я мог бы хотеть выполнить различные операции для строки (foo), зависящей от значения в одной ячейке (foo[1]). Пусть интервалы будут 0:39 и 40:59 и 60: 100

Что-то вроде не выходит:

(if foo[1] "in" 40:60){...

На самом деле, я вижу только пути как минимум из двух предложений if и двух операторов else, а также действия для первого интервала где-то внизу кода. Чем больше интервалов (или любых других условий), тем сложнее становится.

Есть ли лучшая практика (для этой или других целей) с простой конструкцией и приятным дизайном для чтения?

Ответы [ 2 ]

1 голос
/ 19 марта 2010

Не совсем уверен, но я бы предложил использовать что-то вроде:

f <- approxfun(0:100,c(rep(1,40),rep(2,20),rep(3,41)),method="c")
fac <- f(foo)
tapply(foo,fac,FUN,...)

, где вы можете использовать любую функцию FUN.

0 голосов
/ 19 марта 2010

Не совсем после вашего вопроса. Вы ищете заявление о переключении? Посмотрите на этот пример:

ccc <- c("b","QQ","a","A","bb")
for(ch in ccc)
     cat(ch,":",switch(EXPR = ch, a=1,     b=2:3), "\n")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...