0

現在、次の形式の複素数のデータがあります。

r1,i1,r2,i2,...
-1.74550E-0001,5.04828E-0002,7.37643E-0002,-1.70416E-0001,...
...

そして、これらの複素数の絶対値から新しい列を作成したいので、次の方法でこれを実行しようとしました。

data=read.table("umatrix.txt", header=T, sep=",")

for (i in 1:43){
  data$paste("m",toString(i), sep = "") = sqrt((data$paste("r",toString(i), sep = "")^2)+(data$paste("i",toString(i), sep = "")^2))
  }

しかし、これはエラーを取得します:

エラー:非機能を適用しようとしました

おそらく、paste()をdatatable$column構文でこのように使用できないためです。これをどのように達成しますか?

編集:気にしないで、次のように他の構文を使用して修正しました:

for (i in 1:43){
    data[1:43,paste("m",toString(i), sep = "")] = sqrt((data[1:43,paste("r",toString(i), sep = "")]^2)+(data[1:43,paste("i",toString(i), sep = "")]^2))
}
4

1 に答える 1

3

列を抽出するには、次のいずれかを使用できます。

dat$column

また:

dat["column",] # Notice the "

の結果pasteは文字列であるため、2番目の形式を使用する必要があります。

dat[paste(...),]

あなたがしたように最初のフォームを使うとき:

dat$paste(...)

Rは、と呼ばれる関数を探していますが、この関数dat$pasteは存在しないため、エラーが発生します。

dat$columnこれは実際にはに等しいことに注意してくださいdat[["column"]]。このフォームは、列をベクトルとして抽出します。または、dat["column",]フォームはベクトルではなく、data.frame1つの列を持つを生成します。したがって、この最後の形式は、複数の列を抽出するためにも使用できます。dat[c("a","b"),]

于 2012-10-24T20:01:09.073 に答える