Итак, я знаю, чтобы определить первое вхождение определенного элемента в каждой строке, в которой вы используете функцию apply с помощью which.max или which.min. Вот код, который я использую прямо сейчас.What.max произвел тот же результат
x <- matrix(c(20,9,4,16,6,2,14,3,1),nrow=3)
x
apply(3 >= x,1,which.max)
Это производит и выход:
[1] 1 3 2
Теперь, когда я пытаюсь сделать то же самое на другой матрице "x2"
x2 <- matrix(c(3,9,4,16,6,2,14,3,1),nrow=3)
x2
apply(3 >= x2,1,which.max)
Выход есть то же самое;
[1] 1 3 2
Но для «x2» это правильно, потому что первая строка Матрица «x2» действительно есть значение меньше или равно трем.
Теперь мой вопрос, который, вероятно, является чем-то простым, - это то, почему функции apply производят одно и то же для «x» и «x2». Для «х» ниже я хочу что-то вроде:
[1] 0 3 2
Или, может быть, даже что-то вроде этого:
[1] NA 3 2
Я видел вопросы на переполнение стека, прежде чем на which.max не продуцирующих НСБУ и ответ должен был просто использовать функцию(), но поскольку я использую матрицу, и я хочу, чтобы первое появление у меня не было такой роскоши ... Я думаю.
'который.max', примененный к логическому вектору, возвращает индекс первого ИСТИНА; или 1, если нет ИСТИННЫХ значений; или ничего не существует, только значения NA, как описано в документах. Не уверен, что ты здесь. – Frank
@akrun это именно то, что я искал. Вы не возражаете, объясняя, что ";" делать в R-функциях? –
Я думаю, что я ошибаюсь. Может быть «x [x> 3] <- -999; max.col (x) * !! rowSums (x> 0) ' – akrun