Ответ 1
Поскольку ваш вопрос сформулирован в отношении вашего сообщения об ошибке, а не того, что ваша функция пытается выполнить, я устраню эту ошибку.
-
это бинарный оператор, на который ссылается ваша ошибка, и CurrentDay
или MA
(или оба) не числовые.
Бинарная операция - это вычисление, которое принимает два значения (операнды) и создает другое значение (подробнее см. Википедию). +
является одним из таких операторов: "1 + 1" принимает два операнда (1 и 1) и производит другое значение (2). Обратите внимание, что полученное значение не обязательно отличается от операндов (например, 1 + 0 = 1).
R знает, как применять +
(и другие бинарные операторы, такие как -
) к числовым аргументам:
> 1 + 1
[1] 2
> 1 + 'one'
Error in 1 + "one" : non-numeric argument to binary operator
Когда вы видите это сообщение об ошибке, это означает, что вы (или вызываемая функция) пытаетесь выполнить двоичную операцию с чем-то, что не является числом.
РЕДАКТИРОВАТЬ:
Ваша ошибка заключается в использовании [
вместо [[
. Поскольку Day
- это список, подмножество с [
вернет список, а не числовой вектор. [[
однако, возвращает объект класса элемента, содержащегося в списке:
> Day <- Transaction(1, 2)["b"]
> class(Day)
[1] "list"
> Day + 1
Error in Day + 1 : non-numeric argument to binary operator
> Day2 <- Transaction(1, 2)[["b"]]
> class(Day2)
[1] "numeric"
> Day2 + 1
[1] 3
Transaction
, как вы ее определили, возвращает список из двух векторов. Выше Day
- это список, содержащий один вектор. Day2
, однако, просто вектор.