Я пытался заменить для l oop в своем коде на функцию apply, и я пытался сделать это всеми возможными способами, используя sapply и lapply, apply и mapply, всегда кажется, что это не сработало , оригинальная функция выглядит следующим образом
ds1 <- data.frame(col1 = c(NA, 2), col2 = c("A", "B"))
ds2 <- data.frame(colA = c("A", "B"), colB = c(90, 110))
for(i in 1:nrow(ds1)){
if(is.na(ds1$col1[i])){
ds1$col1[i] <- ds2[ds2[,"colA"] == ds1$col2[i], "colB"]
}
}
Моя последняя попытка с применением семейства выглядит следующим образом
ds1 <- data.frame(col1 = c(NA, 2), col2 = c("A", "B"))
ds2 <- data.frame(colA = c("A", "B"), colB = c(90, 110))
sFunc <- function(x, y, z){
if(is.na(x)){
return(z[z[,"colA"] == y, "colB"])
} else {
return(x)
}
}
ds1$col1 <- sapply(ds1$col1, sFunc, ds1$col2, ds2)
, которая возвращает ds2$colB
для каждой строки, может кто-нибудь объяснить мне, что Я ошибся по этому поводу?