2013-04-12 22 views
6

apply関数の使用方法を学習しようとしていますが、このチュートリアルではわかりました:http://nsaunders.wordpress.com/2010/08/20/a-brief-introduction-to-apply-in-r/は明らかで簡潔ですが、すぐに問題に遭遇しています。彼らは適用証明するために与える非常に最初の例は次のとおりです。チュートリアルのRでApply関数を使用するとエラーが発生する

> # create a matrix of 10 rows x 2 columns 
> m <- matrix(c(1:10, 11:20), nrow = 10, ncol = 2) 
> # mean of the rows 
> apply(m, 1, mean) 
[1] 6 7 8 9 10 11 12 13 14 15 

これは非常に基本的なようだが、私はそれを試してみると思いました。ここに私の結果は次のとおりです。

> # create a matrix of 10 rows x 2 columns 
> m <- matrix(c(1:10, 11:20), nrow = 10, ncol = 2) 
> # mean of the rows 
> apply(m, 1, mean) 
Error in FUN(newX[, i], ...) : unused argument(s) (newX[, i]) 

私はこの1つ上の失われたよ、言うまでもなく...

いくつかのより多くの情報を提供するために、私は、チュートリアルで提供される他の例を試みたし、正しい結果を得ました。

apply(m, 1:2, function(x) x/2) 
     [,1] [,2] 
[1,] 0.5 5.5 
[2,] 1.0 6.0 
[3,] 1.5 6.5 
[4,] 2.0 7.0 
[5,] 2.5 7.5 
[6,] 3.0 8.0 
[7,] 3.5 8.5 
[8,] 4.0 9.0 
[9,] 4.5 9.5 
[10,] 5.0 10.0 

のSessionInfo()出力以下である:

R version 2.15.3 (2013-03-01) 
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit) 

locale: 
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

loaded via a namespace (and not attached): 
[1] tools_2.15.3 

AND(TRUE詳細=)競合する出力

この場合の違いは、関数は、特に関数を適用するで述べたことでした
$.GlobalEnv 
[1] "edit" "mean" 

$`package:utils` 
[1] "edit" 

$`package:methods` 
[1] "body<-" "kronecker" 

$`package:base` 
[1] "body<-" "kronecker" "mean" 
+2

あなたの質問に 'sessionInfo()'と 'conflicts(detail = TRUE)'の出力を貼り付けることができますか?それはかなり厄介です! –

+1

クリーンなセッションを開始してください。 –

+0

元のメッセージに追加情報を追加しました。 – tjnel

答えて

2

他人が確認したとおり、おそらくあなたはmeanに競合があると考えられます。あなたは何も(関数、オブジェクト)を呼び出すと、それが発見されるまで、Rは、検索パスを通過(そしてそれが見つからない場合Rはそれに応じて文句を言うでしょう):

> search() 
[1] ".GlobalEnv"  "tools:RGUI"  "package:stats"  
[4] "package:graphics" "package:grDevices" "package:utils"  
[7] "package:datasets" "package:methods" "Autoloads"   
[10] "package:base" 

あなたはR、ノートにかなり新しいしている場合関数を作成するときは、特に指定しない限り、通常は".GlobalEnv"に生存することになります。 Rは先に進む前に最初に見えるので、一般的な機能(例えばmeanplotsummaryなど)と矛盾しないように、関数を賢明に名前を付けることはかなり重要です。

しばらくしてからクリーンセッションを開始することをお勧めします。デバッグフェーズでは、変数xまたはy(情報性ではなく便宜のために名前が選ばれています...私たちは人間だけです)という名前を付けるのはかなり一般的です。これは予期せず問題が発生する可能性があります。かなり混雑しているワークスペースがある場合は、競合の可能性が増すため、(a)名前を慎重に選択し、(b)リストアせずに再起動すると私のアドバイスとなります。

関連する問題