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))
我有这个数据框:
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))