2017-08-02 8 views
0

私は多くのパラメータを持つデータフレームを持っています。簡単にするために、私は3列の例を作った。最初のものは単位で構成され、2番目のものは与えられたパラメータで構成され、3番目のものは計算された数で構成されます。私が欲しいものは次のとおりです: - ユニットと数値を保存するのに適した方法 - パラメータを変更してテーブルを作成する関数です(風速3と4m/sの2番目の例のように)。パラメータの風速と密度を同時に変更する関数を追加することは涼しいでしょう。 私はいくつかのコードが動作します。残念ながら、私は行ごとにそれを処理する必要があります。 20種類の風速のために、それは私が考える不必要な仕事の多くです。私はすでに私が欲しいものを取得する必要がどのような関数による計算(エラー:オブジェクトが見つかりません)

aa <- as.data.frame(matrix(seq(100),nrow=6,ncol=3)) 

aa$V1 <- c("v (m/s)","Cd()", "d (m)", "A (m^2)", "N/(W*L)", "V(m/s)") 

aa$V2 <- c("1", # v 
    "2", # Cd 
    "3",  # d 
    "4", # MW/km^2 
    "5", # Height 
    "6" # coefficient 
) 

aa$V3[1] <- as.numeric(as.numeric(aa[4,2])^2) 
aa$V3[2] <- as.numeric(as.numeric(aa[1,2]) + as.numeric(aa[2,2])) 
aa$V3[3] <- as.numeric(as.numeric(aa[1,2]) * as.numeric(aa[2,2])) 
aa$V3[4] <- as.numeric(as.numeric(aa[1,2]) + as.numeric(aa[2,2]) +  
as.numeric(aa[3,2])) 
aa$V3[5] <- as.numeric(as.numeric(aa[2,2]) + as.numeric(aa[2,3])) 
aa$V3[6] <- as.numeric(as.numeric(aa[1,3]) + as.numeric(aa[2,3])) 

はこれです:

speed_vector <- c("w_sp_3" = 3, "w_sp_4" = 4) 
make_speed <- function(x) 
{ 

V1 <- c("v (m/s)","density (kg/m^3)","Cd()", "d (m)", "A (m^2)", "N/(W*L)", 
"V(m/s)") 

V2 <- c(speed_vector[x], # v 
     "1",  # density 
     "2", # Cd 
     "3",  # d 
     "4", # MW/km^2 
     "5", # Height 
     "6" # coefficient 
    ) 

V3 <- c(as.numeric(as.numeric(V2[4])^2), 
     as.numeric(as.numeric(V2[1]) + as.numeric(V2[2])), 
     as.numeric(as.numeric(V2[1]) * as.numeric(V2[2])), 
     as.numeric(as.numeric(V2[1]) + as.numeric(V2[2]) + as.numeric(V2[3])), 
     as.numeric(as.numeric(V2[2]) + as.numeric(V3[2])), 
     as.numeric(as.numeric(V3[1]) + as.numeric(V3[2]))) 


zz <- data.frame(V1,V2,V3) 
return(zz) 
} 

w_speed_3 <- make_speed("w_sp_3") 
w_speed_4 <- make_speed("w_sp_4") 

は、今私は、次のGET:

"Error in make_speed("w_sp_3") : object 'V3' not found".

間違いを見つけるために私を助けてください。

+0

は、私は本当にあなたがので、私はあまり助けることができない何をしようとして理解していないが、あなたの 'make_speed'機能でV3''の作成にあなたが参照しています最後の2行で「V3」に変更されます。 'V3'はまだ定義されていないので、見つからず、エラーになります。 –

+0

はい、あなたのV3の割り当てで、あなたはV3を参照しています。 – Balter

+0

@OriolMirosa:あなたの答えに感謝します。私は、パラメータを変更して計算を行い、これをリスト、data.frameなどに格納しようとします。 – Baldrian

答えて

0

私はあなたの問題は、次の構文内にあると思う:

V3 <- c(as.numeric(as.numeric(V2[4])^2), 
     as.numeric(as.numeric(V2[1]) + as.numeric(V2[2])), 
     as.numeric(as.numeric(V2[1]) * as.numeric(V2[2])), 
     as.numeric(as.numeric(V2[1]) + as.numeric(V2[2]) + as.numeric(V2[3])), 
     as.numeric(as.numeric(V2[2]) + as.numeric(V3[2])), 
     as.numeric(as.numeric(V3[1]) + as.numeric(V3[2]))) 

あなたはベクトルとしてオブジェクトV3を定義しているが、そのベクトルの最後の2行では、あなたがV3の前に、V3自体を参照しています存在する。つまり、まだ定義されていないオブジェクト(V3)を使用してV3を定義しようとしています。

編集:

make_speed <- function(v){ 

    V1 <- c("v (m/s)","density (kg/m^3)","Cd()", "d (m)", "A (m^2)", "N/(W*L)", 
    "V(m/s)") 

    V2 <- c(v, # velocity 
      "1",  # density 
      "2", # Cd 
      "3",  # d 
      "4", # MW/km^2 
      "5", # Height 
      "6" # coefficient 
     ) 

    V3 <- c(as.numeric(V2[4])^2, 
      as.numeric(V2[1]) + as.numeric(V2[2]), 
      as.numeric(V2[1]) * as.numeric(V2[2]), 
      as.numeric(V2[1]) + as.numeric(V2[2]) + as.numeric(V2[3]), 
      as.numeric(V2[2]) + as.numeric(V2[1]) + as.numeric(V2[2]), 
      as.numeric(V2[4])^2 + as.numeric(V2[1]) + as.numeric(V2[2]), 
      NA) # The other vectors have 7 items, V3 only has 6 in your example 

    return(data.frame(V1,V2,V3)) 
} 

w_speed_3 <- make_speed(v = 3) 
w_speed_4 <- make_speed(v = 4) 
+0

あなたの答えに感謝します。私はすでにそのアイディアを持っていましたが、この問題の解決方法は本当に分かりません。 – Baldrian

+0

私は、最初の例で見ている場合、それは動作します。最初の例を関数に入れて、2つのパラメータを変更する(例: "w_speed_3"と "density_5") – Baldrian

+0

申し訳ありませんが、私の問題を明確に記述できない場合は、上記のコメントをご覧ください。彼らはあなたに私が望むアイデアを与えるかもしれません。 – Baldrian

関連する問題