我正在寻找一种优雅的方式来返回列的值,如果它存在并且(一个向量)NA
或者NULL
如果它不存在。直接解决它会产生一个undefined columns
错误,使用子集会产生一个 0 列数据框。有没有一种优雅的内置方式,没有定义一个函数来做到这一点?
> example(data.frame)
# output omitted
> head(d, 1)
x y fac
1 1 1 A
> head(d['x'], 1)
x
1 1
# Works when accessing column using $
> head(d$z, 1)
NULL
# Not satisfactory
> head(d['z'], 1)
Error in `[.data.frame`(d, "z") : undefined columns selected
> head(d[colnames(d) == 'z'], 1)
data frame with 0 columns and 1 rows
编辑:当然,这条单线可以完成这项工作。我正在寻找更多的 R-ish 方式。
> safe.index <- function(df, n)
if (any(n %in% colnames(df))) df[n] else rep(NA, nrow(df))
> head(safe.index(d, 'z'), 1)
[1] NA