В if (wspolczynnik > waga_linkow [n]) {: условие имеет длину & ​​gt; 1, и будет использоваться только первый элемент

Nerson48 спросил: 28 марта 2018 в 02:50 в: r

У меня есть два массива: wspolczynnik и waga_linkow

, и я хотел бы ввести следующую команду:

if (wspolczynnik > waga_linkow[n]){
  print('jest ok ')
} else {
  print('za male')
}

Я получаю следующее предупреждающее сообщение:

[1] "za male"
Warning message:
In if (wspolczynnik > waga_linkow[n]) { :
  the condition has length > 1 and only the first element will be used

Как я могу исправить инструкцию?


1 ответ

Есть решение
griffinevo ответил: 01 апреля 2018 в 03:00

Ваш код использует весь первый вектор, вам нужно добавить [n] после обоих векторов в аргументе if, например:

A <- c(1,2,3,4)
B <- c(0,0,1,5)
n <- 1if (A[n] == B[n]){
  print('A equal to B')
} else {
  print('A not equal to B')
}

Вы можете вернуть результаты для все записи двух векторов (т.е. A [1] и B [1], A [2] и B [2] ...) пишут функцию и используют цикл for

print_func <- function(a, b){
  if(a == b){
    print('a equal to b')
} 
if (a != b){
    print('a not equal to b')
}
}for(i in 1:4){
  print_func(A[i], B[i])
}

Однако я предпочитаю делать векторизованную версию.

A <- c(1,2,3,4)
B <- c(0,0,1,4)
R <- rep("Not Equal", 4)
R[A == B] <- "Equal"
R
griffinevo ответил: 30 марта 2018 в 06:07
@ nerson48, если это ответит на ваш вопрос, примите ответ, если не уточните вопрос, и я адаптирую ответ в соответствии с вашими требованиями.
griffinevo ответил: 01 апреля 2018 в 03:02
@ Nerson48 Я добавил векторизованную версию