我想创建一个通用函数naTrans
,用'NA'
替换''
和NA
。
问题在于我无法通过在函数内创建的修改后的test
数据框(test
)替换全局环境中的数据框mydf
。这是我最好的尝试。
# Example dataframe containing 'NA'
test <- as.data.frame(matrix(sample(c('NA', 1:9), 10*10, TRUE), 10))
# My function
naTrans <- function (mydf) {
mydf[mydf == 'NA' | mydf ==''] <- NA
assign(deparse(substitute(mydf))[1], mydf, envir = globalenv())
}
test <- naTrans(test)
any(is.na(test))
# [1] FALSE
问题当然在于代码的最后一行assign(print(deparse(substitute(mydf))), mydf, envir = globalenv())
有什么想法吗?
答案 0 :(得分:1)
我希望代码中的注释足够清晰
test <- as.data.frame(matrix(sample(c('NA',1:9),10*10,T),10))
naTrans <- function (mydf) {
mydf[mydf == 'NA' | mydf == ''] <- NA # use and or opertor, %in% don't work on DF but on vectors
return(mydf) # return the modified mydf (the return is optionnal, you may just use mydf here
}
test <- naTrans(test) # replace actual object by caller.