[英]R nested functions
我必須計算數據集中每個觀察值的缺失值數量。 由於跨多個時間段有多個變量,我認為最好嘗試一個函數來保持語法清晰。 查找缺失值數量的第一部分工作正常:
data$NMISS <- data %>%
select('x1':'x4') %>%
apply(1, function(x) sum(is.na(x)))
但是,當我嘗試將其轉換為函數時,我得到“select() 錯誤:!NA/NaN 參數”
library(dplyr)
library(tidyverse)
data <- data.frame(x1 = c(NA, 1, 5, 1),
x2 = c(7, 1, 1, 5),
x3 = c(9, NA, 4, 9),
x4 = c(3, 4, 1, 2))
NMISSfunc <- function (dataFrame,variables) {
dataFrame %>% select(variables) %>%
apply(1, function(x) sum(is.na(x)))
}
data$NMISS2 <- NMISSfunc(data,'x1':'x4')
我認為它不喜歡范圍內的:
因為它將接受c('x1','x2','x3','x4')
而不是'x1':'x4'
有些范圍超過二十列,因此列出它們並不能真正提供保持語法整潔的解決方案。
有什么建議么?
你是對的,你不能使用"x4":"x4"
,因為在這種情況下這不是:
運算符的有效使用。 為了使它以 tidyverse 風格工作,您的variables
變量需要在select
中有選擇地取消引號。 幸運的是,tidyverse 有卷曲的符號{{variables}}
來處理這種情況:
NMISSfunc <- function (dataFrame, variables) {
dataFrame %>%
select({{variables}}) %>%
apply(1, function(x) sum(is.na(x)))
}
現在我們可以使用x1:x4
(不帶引號)並且該函數按預期工作:
NMISSfunc(data, x1:x4)
#> [1] 1 1 0 0
創建於 2022-12-13,使用reprex v2.0.2
為什么不簡單地,
data %>%
mutate(NMISS = rowSums(is.na(select(., x1:x4))))
x1 x2 x3 x4 NMISS
1 NA 7 9 3 1
2 1 1 NA 4 1
3 5 1 4 1 0
4 1 5 9 2 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.