Функция хорошо работает строка за строкой с указанным я, но не работает с вызовом функции - PullRequest
0 голосов
/ 07 декабря 2011
FUNC <- function(i){
var <- i
dist <- sapply(1:(i-1),function(x){list[[x]]*co[var,x]})
mean <- sapply(1:(i-1),FUN2)
block <- t(co[i,i]*list[[i]])+rowSums(mean)
new_list[[i]] <- t(block)
}

Когда я указываю i = 4 или i = 10 и построчно запускаю код внутри определения функции, он полностью работает и присваивает new_list[[i]] значение t(block). однако, когда я делаю

FUNC(4) or FUNC(10)

Возвращает сообщение об ошибке

Error in dist[[x]] : subscript out of bounds

Кто-нибудь знает, почему это не сработает с вызовом функции? Спасибо !!

1 Ответ

3 голосов
/ 07 декабря 2011

Я подозреваю, что ваша FUN2 функция использует dist. Но dist, который вы вычисляете внутри FUNC, является локальным, поэтому FUN2 не может его найти. Вместо этого он использует тот в вашем глобальном рабочем пространстве, который, вероятно, слишком короткий. Вот почему вы получаете это сообщение об ошибке.

Вы должны действительно изменить и FUNC, и FUN2, чтобы они не использовали глобальные переменные (co, dist, list, new_list - и, возможно, FUN2 тоже могут быть аргументами до FUNC).

... но, по крайней мере, измените FUN2 на dist в качестве аргумента:

FUN2 <- function(i, dist) {
  # Your code here...
}

# In FUNC: Pass dist to FUN2
mean <- sapply(1:(i-1),FUN2, dist=dist)

... И если вы хотите сохранить этот код, вам следует ДЕЙСТВИТЕЛЬНО рассмотреть возможность придания функциям более описательных имен ...

...