Я борюсь с небольшим количеством кода.Я могу заставить его работать очень неэффективно, но подумал, что должен быть лучший способ это исправить.Я пытаюсь скомпилировать переменную из нескольких разных переменных.В закодированных переменных «пропуск» кодируется как конкретное число (для примера ниже «99»).Я пытаюсь создать переменную общей стоимости на основе 10 из этих переменных.
Таким образом, я создал неэффективный код, который работает:
var1 <- ifelse(data$v1<99, data$v1, 0)
var2 <- ifelse(data$v2<99, data$v2, 0)
...
var10 <- ifelse(data$v1<99, data$v10, 0)
sumvar <- var1 + var2 + var3 + var4 + var5 + var6 + var7 + var8 + var9 + var10
Я пытался использовать команду sapply
, чтобы сделать ее более элегантной, но она не сработала.Я просто пытался понять, может ли кто-нибудь дать мне несколько советов или помочь понять, почему мой код не работает.Я помещаю его в среду списка (что я считаю правильным после попытки других, таких как cbind) и пытаюсь сделать определенный вызов, но получаю ошибку.В качестве примера кода я настроил следующее:
set.seed(1234)
data <- data.frame(x=rnorm(30), y=rnorm(30), z=rnorm(30))
data$x <- ifelse(data$x > 1, 99, data$x)
data$y <- ifelse(data$y > 1, 99, data$y)
data$z <- ifelse(data$z > 1, 99, data$z)
t.list <- list(data$x, data$y, data$z)
sumvar1 <- sapply(1:length(t.list), function(i){
tempvar <- ifelse(t.list[i] !=99, t.list[i], 0)
sumvar1 <- sumvar1 + tempvar
})
Проблема в том, что, когда я пытаюсь использовать свой реальный код (или этот код), я получаю:
Error in storage.mode(test) <- "logical" :
(list) object cannot be coerced to type 'double'
Calls: sapply -> lapply -> FUN -> ifelse
Очевидно, что я делаю что-то не так, но я не уверен, что это такое.Я посмотрел на файл справки для ifelse, но я не понимаю сообщение об ошибке, которое выводится.Я получил код для выполнения неэффективным способом, но мне бы очень хотелось получить отзывы и знания о том, как улучшить свое будущее кодирование на R.
Спасибо!