#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