Подтвердить что ты не робот

Нечисловой аргумент для двоичной ошибки оператора в R

Проблема, по-моему, заключается в том, как вводится CurrentDay. Он был создан ранее:

Transaction <- function(PnL, Day)
  results <- list(a = PnL, b = Day)
  return(results)

Оба значения PnL и Day являются числовыми значениями.

Day <- Transaction(PnL, Day)["b"]

Если транзакция вернула список, а b - целое число.

moving_avg <- function(StockData, MA, CurrentDay){
  #MA = Days long the MA is
  #CurrentDay = What day we are currently on
  MAValue <- NULL
  total <- 0
  start <- CurrentDay - MA
  for(i in 1:length(MA)) {
    total <- total + StockData[[start, 4]]
    start <- start + 1
  }
  MAValue <- total/MA
  return(MAValue)
}

Кто-нибудь знает, почему я получаю эту ошибку?

Ошибка в CurrentDay - MA: нечисловой аргумент для двоичного оператора

4b9b3361

Ответ 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, однако, просто вектор.

Ответ 2

Я с той же проблемой.

macfem <- readWorksheetFromFile(file = "dados_segalla.xlsx", 
                               sheet = "machofemea2", 
                               header = TRUE, 
                               startRow = 1, 
                               startCol = 1, 
                               endCol = 3,
                               endRow = 21)
macfem <- as_tibble(macfem)
macfem
mfplot <- ggplot(macfem, aes(x = site_pop, y = n, fill = gender)) + geom_bar(stat = "identity", position = "dodge")
mfplot
mfplot <- mfplot + geom_errorbar(aes(x = site_pop, ymin = n - sd, ymax = n + sd), width=0.4, colour="orange", alpha=0.9, size=1.3) # The error happens here
mfplot # The error happens here