Это происходит, когда вы вызываете побочный эффект в баре () и затем перепрыгиваете на верхний уровень. Функция bar () завершает побочный эффект (печать), затем возвращает последнее значение последней команды на верхний уровень.
Это расположение возвращает один NULL независимо от размеров a и b. Как и в ...
a <- matrix(1:9,nrow=3,ncol=3)
b <- matrix(1:9,nrow=3,ncol=3,byrow=TRUE)
foo <- function(a,b) {
exists("a")
exists("b")
}
bar <- function(a,b) {
if(foo(a,b)) {print(c(a,b))}
NULL # or equivalently: return()
}
x <- bar(a,b) # x will be a single NULL
В качестве альтернативы, вы можете просто сделать то, что в bar (), что вы хотите, возвращать a и b соответствующим образом, а затем печатать вне функции, используя возвращаемые значения. В большинстве случаев это, вероятно, будет лучшей идеей. Также оператор «<< -» может быть полезен здесь, хотя глобальные переменные имеют свои проблемы, помимо побочного эффекта здесь. </p>