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っぽい方法を探しています。
> 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