Сложение с числовыми (0) значениями

#r #numeric #addition

#r #числовое #сложение

Вопрос:

Предположим, что x — действительное число или вектор. значение i равно False. Тогда x[i] вернет числовое значение (0). Я хотел бы рассматривать это как действительное число 0 или целое число 0, которые оба подходят для добавления.

числовое (0), добавленное к любому действительному числу, вернет числовое (0), тогда как я хочу получить добавляемое в результате действительное число. Что я могу сделать, чтобы преобразовать числовое (0) значение? Заранее спасибо!

Комментарии:

1. напишите вспомогательную функцию as_num <- function(x) {if (length(x)==0) 0 else x} , тогда вы могли бы сделать as_num(5[FALSE]) 5

2. Реальная проблема заключается в том, что numeric(0) не имеет длины … что может вызвать и другие проблемы. Если вы дадите больше контекста, мы могли бы помочь вам полностью избежать проблемы.

Ответ №1:

Это только тогда, когда мы делаем , это проблема. Этого можно избежать, если мы используем sum

 sum(numeric(0), 5)
#[1] 5
sum(numeric(0), 5, 10)
#[1] 15
  

Или, если нам нужно использовать , простой вариант — объединить с 0 , выберите первый элемент. Если элемент есть numeric(0) , он заменяется на 0, в других случаях первый элемент остается нетронутым

 c(numeric(0), 0)[1]
#[1] 0
  

Используя небольшой пример

 lst1 <- list(1, 3, numeric(0),  4, numeric(0))
out <- 0
for(i in seq_along(lst1)) {
       out <- out   c(lst1[[i]], 0)[1]
  }

out
#[1] 8
  

Ответ №2:

Вы можете использовать max / min с 0, чтобы получить 0 в качестве вывода при вводе numeric(0) .

 x <- 1:10
max(x[FALSE], 0)
#[1] 0

min(x[FALSE], 0)
#[1] 0