我想要一個函式,它首先修改 data.table(如果滿足某些條件)然后聚合一些值。
df.flights <- flights
setDT(df.flights)
aggregate_flights <- function(x, test = FALSE) {
if (test == TRUE) {
df_flights_red <- df.flights[tailnum == "N9EAMQ" | tailnum == "N950UW" | tailnum == "N460WN"]
} else {
df_flights_red <- df.flights
}
y <- df_flights_red[, .(air_time = sum(air_time, na.rm = TRUE),
distance = sum(distance, na.rm = TRUE)),
by = .(month, x)]
return(y)
}
agg <- aggregate_flights(df_flights_red[[tailnum]], TRUE)
我總是收到無法找到物件“df_flights_red”的錯誤訊息。看來,我對函式的呼叫不正確
agg <- aggregate_flights(df_flights_red[[tailnum]], TRUE)
我該如何撥打這個電話?
uj5u.com熱心網友回復:
錯誤訊息是有道理的,因為您df_flights_red在全域環境中沒有任何命名的物件。df_flights_red存在于您無法從外部訪問的函式內部。
如果我已經清楚地了解您,這里是您可以使用的
將資料作為第一個引數傳遞給函式。這不是必需的,但這是一個很好的做法。
將列名作為字串傳遞 (
'tailnum')test == TRUE是多余的,僅使用test.A == 'a' | A == 'b' | A == 'c'可以改為A %in% c('a', 'b', 'c').
library(data.table)
df.flights <- nycflights13::flights
setDT(df.flights)
aggregate_flights <- function(data, x, test = FALSE) {
if (test) {
df_flights_red <- data[tailnum %in% c("N9EAMQ", "N950UW" ,"N460WN")]
} else {
df_flights_red <- data
}
y <- df_flights_red[, .(air_time = sum(air_time, na.rm = TRUE),
distance = sum(distance, na.rm = TRUE)),
by = c('month', x)]
return(y)
}
agg <- aggregate_flights(df.flights, 'tailnum', TRUE)
agg
# month tailnum air_time distance
# 1: 1 N9EAMQ 2543 15944
# 2: 1 N950UW 597 2608
# 3: 1 N460WN 471 3040
# 4: 10 N9EAMQ 1346 9040
# 5: 10 N460WN 569 3966
# 6: 10 N950UW 728 3404
# 7: 11 N950UW 481 1856
#...
#...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340018.html
