R 中的匿名函数不返回预期输出

Anonymous function in R not returning expected output

我有这个数据框:

df <- data.frame(c(NA,2,3,1),c(4,NA,6,1),c(7,8,NA,9),c(1,5,6,4))
colnames(df) <- c('x1','x2','x3','x4')`

如果我编写一个简单的插补函数来插补 NA 值:

impute <- function(x, imputation.method) { 
x[is.na(a)] <- imputation.method
x
}

并在原始数据帧的前两列上调用它。它正确地估算 NA 值:

library(purrr)
df[,c('x1', 'x2')] <- map(df[,c('x1', 'x2')], impute, 0)
df

# x1 x2 x3 x4    
# 0  4  7  1     
# 2  0  8  5     
# 3  6 NA  6    
# 1  1  9  4  

然后,如果我尝试使用匿名函数在单行代码中执行此操作,它 return 会出现以下不需要的输出:

df[,c('x1', 'x2')] <- map(df[,c('x1', 'x2')], function(x){x[is.na(x)] <- 0 })

# x1 x2 x3 x4    
# 0  0  7  1     
# 0  0  8  5     
# 0  0 NA  6    
# 0  0  9  4    

我不知道为什么像单行匿名函数一样重写我的原始函数会改变输出。任何关于为什么会发生这种情况以及如何将匿名函数更改为 return 所需输出的任何输入都将受到赞赏!

给你!

  df[,c('x1', 'x2')] <- map(df[,c('x1', 'x2')], function(x){x[is.na(x)] <- 0;x })
  #   x1 x2 x3 x4
  # 1  0  4  7  1
  # 2  2  0  8  5
  # 3  3  6 NA  6
  # 4  1  1  9  4

您的函数是 returning 0,它需要 return 修改后的 x

这是另一种写法:

mutate_at(df, c('x1', 'x2'), ~`[<-`(., is.na(.), value = 0))