2017-10-29 8 views
1

applyを使用すると、タイプは常にcharacterにキャストされているようです - タイプに応じて異なる方法でカラムに反応したいのですが、タイプや類似の機能を保持する方法はありますか?適用するタイプを保持する

calculate_stats = function(data, divideby){ 
    print(typeof(data)) # Always prints character! 
} 

get_result_table = function(data, divideby){ 
    apply(data, 2, calculate_stats, divideby = divideby) 
} 

get_result_table(iris, iris$Species) 
+0

'apply'は、あなたのデータを' matrix'( '?apply'参照)に暗黙的に強制します。これはシングルモードのデータ型のみを許可します。 'iris $ Species'は要素なので、すべての列は文字列に変換されます。 –

+0

私は、魔法の変数があるかどうか疑問に思っています。しかし、助けてくれてありがとう! – Cenoc

+0

わかりませんが、私の 'sapply'答えは下にあります... –

答えて

0

さらに上記の私のコメントに、あなたは

get_result_table(iris, iris$Species) 
#[1] "double" 
#[1] "double" 
#[1] "double" 
#[1] "double" 
#[1] "integer" 
#Sepal.Length Sepal.Width Petal.Length Petal.Width  Species 
# "double"  "double"  "double"  "double" "integer" 

を取得おそらくこれは、あなたが期待するより何ですか?

+0

これはありがとうございます! 'calculate_stats'関数から列名を取得することは可能ですか? – Cenoc

+0

あなたは何を意味するのか分かりません。列データ型を持つ名前付き文字ベクトルの後ろにいますか? –

+0

正確に(Sepal.Length Sepal.Width Petal.Length Petal.Width Species) - シーケンスを渡す唯一の回避策は何ですか? – Cenoc

0

colwiseplyrパッケージはまさにこれです。あなたは

get_result_table = function(data, divideby) { 
    sapply(data, calculate_stats, divideby = divideby) 
} 

を定義した場合

関連する問題