2016-04-12 24 views
0

マトリックス内にヒストグラムを自動的に作成する関数を作成しています。ただし、行列の列の1つが整数または数値でない場合、関数は停止し、残りの列は引き続き完了しません。以下は、私は私が望むすべてのヒストグラムを得るように、私は整数/(私の例では、このようなV2など)の数値ない列をスキップするようにRを伝えるために自分のコードに追加するかを知る必要があり、コードforループを使用しているときに列をスキップ

V1 <- rnorm(26) 
V2<-letters 
V3 <- rnorm(26) 
all.data <- matrix(V1, V2, V3) 
My_function <- function(x) 
    for(i in 1:ncol(x)) { 
    hist(x[,i], main = paste("Histogram of",colnames(x)[i]), xlab=paste(colnames(x)[i])) 
    } 
My_function(all.data) 

です非整数/数値列をスキップします。

答えて

1

ベストは実際にのみ

V1 <- rnorm(26) 
V2<-letters 
V3 <- rnorm(26) 
all.data <- data.frame(V1, V2, V3) 
My_function <- function(x){ 
    col<-which(sapply(x,class) %in% c("numeric","integer")) 
      for(i in col) { 
       hist(x[,i], main = paste("Histogram of",colnames(x) [i]),  
        xlab=paste(colnames(x)[i])) 
      }} 
My_function(all.data) 
+0

これは素晴らしいことです。しかし、列が整数で数値でない場合はどうでしょうか?数値変数と整数変数の両方を処理するコードに何を追加しますか? –

1

grepを試して数値/整数列を検索し、それらの列をフィルタリングすることができます。

Subdat <- all.data[,!apply(all.data, 2, function(x) any(grepl("[A-Za-z]", x)))] 

出力を見ると、まだcharacterクラスです。だから、しかし、混在列クラスとmatrixを作成するためによくないですnumeric

`dim<-`(as.numeric(Subdat), dim(Subdat)) 

にこれらの列を変換します。 1つの非数値要素があっても、matrix全体がcharacterクラスに変換されます。異なるクラスに対応できるdata.frameまたはlist(長さも異なる場合に備えて)を作成し、列を除外する方が簡単です。

+0

おかげでクラスを取得し、インデックスの数値することですが、これは動作しません。コードを挿入すべき特定の行/場所はありますか? –

+1

@DarrinThomas私は 'all.data < - matrix(V1、V2、V3)'は動作しないと言います。もう一度確認してください。あなたが 'all.data < - cbind(V1、V2、V3) 'を実行していると思います。 – akrun

関連する問題