1

私はRに少し慣れていないため、学習しようとしていますが、つまずいた問題を修正する方法について混乱しています。ファイルごとに 1 つのヒストグラムを作成できるように、複数のファイルを入力しようとしています。このコードは、特にファイルが 1 つだけの場合はうまく機能しますが、複数のファイルを入力すると問題が発生しました。

編集:終了コード

library("scales")
library("tcltk")
File.names<-(tk_choose.files(default="", caption="Choose your files", multi=TRUE, filters=NULL, index=1))
Num.Files<-NROW(File.names)
dat <- lapply(File.names,read.table,header = TRUE)
names(dat) <- paste("f", 1:length(Num.Files), sep="")
tmp <- stack(lapply(dat,function(x) x[,14]))
require(ggplot2)
ggplot(tmp,aes(x = values)) + 
    facet_wrap(~ind) +
    geom_histogram(aes(y=..count../sum(..count..)))
4

2 に答える 2

5

さて、ここにあなたが始めるための何かがあります(しかし、あなたのコードは再現できないので、あなたのためにそれが正確に機能するかどうかはわかりません):

dat <- lapply(File.names,read.table,header = TRUE)
names(dat) <- paste("f", 1:length(Num.Files), sep="")

tmp <- stack(lapply(dat,function(x) x[,14]))

require(ggplot2)
ggplot(tmp,aes(x = values)) + 
    facet_wrap(~ind) +
    geom_histogram()

この行の後に書いたものはすべて捨ててください:

File.names<-(tk_choose.files(default="", caption="Choose your files", multi=TRUE, filters=NULL, index=1))

代わりに上記のコードを使用してください。

他のいくつかの説明 (BlueTrin が最初のエラーを説明しました):

for (i in Num.Files){
f<- read.table(File.names[i],header=TRUE)
}

これはファイル名をループしてそれぞれを読み取りますが、ループのたびに前のファイルを上書きします。に残るのは、最後に保存されたファイルだけfです。

colnames(f) <- c(1:18)
histoCol <- c(f$'14')

c()ここでは関数は必要ありません。だけ1:18で十分です。しかし、列名としての数字は一般的に扱いにくいため、おそらく避けるべきです。

于 2012-08-09T14:48:46.857 に答える
2
f(Num.Files) <- paste("f", 1:length(Num.Files), sep = "") : could not find function "f<-"

この特定のエラーは、関数の結果に文字列を割り当てようとしたために発生します。

これにより、値がリストに読み込まれます。

library("lattice");
library("tcltk");
File.names<-(tk_choose.files(default="", caption="Choose your files", multi=TRUE, filters=NULL, index=1));
Num.Files<-NROW(File.names);

result_list = list();
#f(Num.Files)<-paste("f", 1:length(Num.Files), sep="");
#ls();

for (i in Num.Files) {
    full_path = File.names[i];
    short_name = basename(full_path);
    result_list[[short_name]] = read.table(full_path,header=TRUE);
}

このプログラムを実行したら、引用符なしで「result_list$」と入力し、TAB を押して完了します。または、たとえば result_list[[1]] を使用して最初のテーブルにアクセスすることもできます。

result_list は list 型の変数で、ラベル (この場合はファイル名) による索引付けをサポートするコンテナーです。(完全なファイル名はリストでは少し見にくいので、完全なファイル名を短いファイル名に置き換えましたが、自由に元に戻してください)。

f を変数として使用しないように注意してください。f は、関数を作成するときの予約済みキーワードです。上記のプログラムで result_list を f に置き換えようとすると、うまくいかないはずです。

他のソリューションを使用して、開始するのに十分であることを願っています!

于 2012-08-09T14:47:12.120 に答える