2013-04-12 1 views
6

Я пытаюсь узнать, как использовать функцию apply, и я наткнулся на этот учебник: http://nsaunders.wordpress.com/2010/08/20/a-brief-introduction-to-apply-in-r/, который кажется ясным и кратким, но я сразу столкнулся с проблемой. Самый первый пример, который они дают для демонстрации применительно, это:Ошибка при использовании функции Apply в R в уроке Пример

> # 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]) 

Излишне говорить, что я потерял на этом ...

Чтобы предоставить больше информации, я попытался еще один пример, приведенный в учебнике и получили правильный результат. Разница в данном случае в том, что функция была специально указано в функции применяются:

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 

И выход для конфликтов (подробности = TRUE)

$.GlobalEnv 
[1] "edit" "mean" 

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

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

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

Можете ли вы вставить выходные данные 'sessionInfo()' и 'conflict (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 выглядит там прежде, чем идти дальше, поэтому довольно важно назвать ваши функции разумно, чтобы не противоречить общим функциям (например, mean, plot, summary).

Возможно, неплохо начать с чистой сессии раз в то время. На этапе отладки довольно часто называть переменные x или y (имена выбраны для удобства, а не информативности ... мы все-таки люди), что может быть неожиданно проблематичным по линии. Когда у вас есть рабочее пространство, которое достаточно переполнено, вероятность конфликтов увеличивается, поэтому (а) тщательно подбирайте имена и (б) перезагрузка без восстановления - это мой совет.

Смежные вопросы