map する

R でデータフレーム等の各要素に関数を適用するには、apply の次元として c(1, 2) を指定する。apply は行ごと・列ごとに集計するイメージがあったが、第2引数としてベクトルを指定することで要素ごとに適用することも可能だったのだ。

vcf[, sample_names] <- apply(vcf[, sample_names], 1:2, function(x)substr(x, 1, 3))

みたいにすれば、一部のカラムだけに関数を適用して、結果で置き換えることも可能。本例は、VCF の genotyping カラムを "0/0:123:123:..." のような状態から GT だけ取り出して "0/0" のように単純化する。