考慮這個簡單的例子如何用lm來使用?
library(dplyr)
library(broom)
dataframe <- data_frame(id = c(1,2,3,4,5,6),
value = c(NA,NA,NA,NA,NA,NA))
dataframe
> dataframe
# A tibble: 6 x 2
id value
<dbl> <lgl>
1 1 NA
2 2 NA
3 3 NA
4 4 NA
5 5 NA
6 6 NA
我基本上使用lm
計算列的平均值在我的數據幀的功能。
get_mean <- function(data, myvar){
col_name <- as.character(substitute(myvar))
fmla <- as.formula(paste(col_name, "~ 1"))
tidy(lm(data = data, fmla, na.action = 'na.omit')) %>% pull(estimate)
}
現在
> get_mean(dataframe, id)
[1] 3.5
因爲缺失值,但是,
get_mean(dataframe, value)
返回到返回NA或任意數量的可怕
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
0 (non-NA) cases
我想功能由我指定w如果出現全NA情況。我試圖用purrr:possibly
但沒有成功
get_mean <- function(data, myvar){
col_name <- as.character(substitute(myvar))
fmla <- as.formula(paste(col_name, "~ 1"))
model <- purrr::possibly(lm(data = data, fmla, na.action = 'na.omit'), NA)
if(!is.na(model)) {
tidy(model) %>% pull(estimate)
}
}
get_mean(dataframe, id)
不起作用
Error: Can't convert a list to function
我該怎麼辦? 謝謝!
您確定要使用'可能是()'這裏?這是一個函數,它接受一個函數並返回另一個函數 - 這些函數都不是你真正想要的。 – MrFlick
啊!那時我很困惑。我也嘗試過'tryCatch',但沒有成功。我很好,你看到了你的方式。謝謝! –
使用'tryCatch'。像'return(tryCatch(<你的lm代碼>,error = function(e)NA))'''。 – Gregor