いくつかのデータ形式変換を行うためのユーティリティ関数を書いていますが、それを正しく記述できないため、適用したいデータに適用され、正しい形状の結果が返されます。
私はHiRawTinyと呼ばれるテストデータセットを持っています。strは以下に示されています。V1のデータはcharです。GetRankというテスト関数があります。この関数の仕事は、「:」の右側にあるすべての文字を取得して、それらを数値に強制変換することです。これも以下に示されています。strsplitの出力を取得するためにfnで使用したリスト構文のリストは、私には少し不透明です。率直に言って、試行錯誤で到達しましたが、単一の値を渡した場合は問題なく機能するようです。しかし、ベクトル(データフレーム列)を渡すと、渡したベクトルと同じ長さのベクトル結果は得られず、単一の値しか得られません。
これを整理するにはどうすればよいですか?私はRに不慣れで(何十年も前にSを使用していましたが)、構文の混乱に陥ったのではないかと思います。私がやろうとしていることを考えると、私の関数の構文は間違っていますか?これを行うために、「適用」またはその友人の1人を使用することを検討する必要がありますか?または、fnはベクトル入力/ベクトル出力をネイティブに処理できる必要がありますか?
str(HiRawTiny)
>'data.frame': 10 obs. of 7 variables:
>$ V1: chr "RANK:1" "RANK:2" "RANK:3" "RANK:4" ...
$ V2: chr
> "SOURCEID:CWC02001632398F4C" "SOURCEID:CWC020000F0D57DD6"
> "SOURCEID:CWC0200214C29872E" "SOURCEID:CWC0200163206B9F2" ...
$ V3:
> chr "TIME:01:04:2012-22:23:58" "TIME:01:04:2012-12:07:55"
> "TIME:01:04:2012-12:39:51" "TIME:02:04:2012-07:18:25" ...
$ V4: chr
> "SCORE:3142" "SCORE:3040" "SCORE:2911" "SCORE:2882" ...
$ V5: chr
> "TIEBREAK:4923864" "TIEBREAK:5787094" "TIEBREAK:766764"
> "TIEBREAK:1872936" ...
$ V6: chr "" "" "" "" ...
$ V7: chr "" ""
> "" "" ...
GetRank function(x) {as.numeric(strsplit(x, split=":")[[1]][2]) }
GetRank(HiRawTiny[1,1]) [1] 1
GetRank(HiRawTiny[2,1]) [1] 2
GetRank(HiRawTiny[,1]) [1] 1
#"What I want is a vector of GetRank being applied to all of column 1