0

私はRの初心者です。先週、長くて複雑な関数が完全に機能していました。プログラムは、列のサブセットを選択させ、そのサブセットに対してさまざまな操作を実行させていました。関数は 'function(arg1=first_header_name, arg2=second_header_name,....)' で動作する必要があります。コンソールをクリアし、古い履歴ファイルを削除しました。マニュアルをもう一度読み、.csv ファイルをチェックして、すべてが同じであることを確認しました。戻って、すべてを段階的に作り直しました。この新しい問題が発生する場所があります。非常に長い機能なので、突然動作しなくなった部分を簡略化したバージョンで再現するだけです。

 elbow <- function(arg1,arg2) {
   my_data <- read.csv("data.csv", header=TRUE, sep=",") 
   average_A <- (arg1 + arg2)
   average_A
 }
 elbow(A3,A5)
 # Error in elbow(A3, A5) : object 'A3' not found

列ヘッダーは A3、A4、A5、A7、A8、A9、B2、B3、B5、B6、B7、B9 です。

私はどんなばかげた小さな間違いを犯していますか?これは私をバタバタさせています。それは些細なことでなければなりません。

4

2 に答える 2

9

あなたが望むように何がうまくいくかについての私の推測は次のとおりです。

elbow <- function(arg1,arg2) {
   my_data <- read.csv("data.csv", header=TRUE, sep=",") 
   average_A <- my_data[[arg1]] + my_data[[arg2]]   # "[[" evaluates args
   average_A
 }
 elbow('A3','A5')  # entered a character literals

残りの my_data は蒸発し、elbow呼び出しから戻った後にガベージ コレクションされることに注意してください。元の表現を次のように使用する方法を示すこともできましたがattach()、これはその関数内ではほぼ間違いなく安全でしたが、それは私の宗教的原則に違反していたでしょう.

于 2013-01-22T23:05:45.130 に答える
4

おそらく、最後のセッション中に、ワークスペースに A3 または A5 という名前のオブジェクトがありました (明示的に定義されているかattach、データを読み込んで編集した可能性があります)。これらのオブジェクトが存在するため、関数は機能していましたが、実際には思ったとおりに機能していませんでした。そのため、新しいワークスペースでの新しいセッションでは、それらのオブジェクトがなければ機能していません。my_data書かれた関数は、実際にはデータセット ( ) で何もしません。次のようなものが必要だと思います:

elbow <- function(arg1, arg2) {
  my_data <- read.csv("data.csv",header=TRUE,sep=",")
  average_A <- my_data[,arg1] + my_data[,arg2]
  return(average_A) 
}

関数を呼び出すときも引用符を使用する必要があります。

elbow('A3','A5')
于 2013-01-22T23:02:03.820 に答える