Я бы хотел, чтобы функция «count» подсчитывала количество записей в «данных», которые соответствуют «critvalue» с помощью «operator» = 1 (<), = 2 (=), = 3 (>).Функция устранения неполадок с несколькими необязательными аргументами
count = function(data,critvalue,operator=2) {
if (operator == 1){
sum(data < critvalue)}
if (operator == 2){
sum(data == critvalue)}
if (operator == 3){
sum(data > critvalue)}}
Он работает на вектор значений:
count(rep(6,10),critvalue=5,operator=1)
Когда я применяю эту функцию в матрицу для подсчета по строкам, он не работает:
m = rbind(1:10,1:10,1:10)
apply(m, 1, count, critvalue = 6)
Но когда Я определяю функцию «счет», чтобы не принимать аргумент оператора, он как-то работает
count = function(data,critvalue,operator=2) {
sum(data == critvalue)}
apply(m, 1, count, critvalue = 6)
Любая помощь в выяснении, почему это не работает в функции apply, будет с благодарностью.
Кроме того, меня определенно интересовали бы базовые функции, которые уже считаются такими. Я попробовал «сумму», но не знаю, как использовать его в приложении.
sum(m == 6) #works
apply(m,1,sum, #no idea how set the criteria for being equal to 6
Ваша первая проблема заключается в том, что 'm' не является матрицей. Читайте '? Matrix' и'? C'. – Roland
oops, да, я заметил это и хотел изменить его на rbind ... только что отредактировал сообщение, чтобы отразить это, спасибо – jhjudd