Loop does not print function output

2020-05-05 04:09发布

问题:

I'm trying to make a loop which gives me back the bootstrapped confidence intervals for a regression analysis with one Intercept and three coefficients. Programming the bootstrapping function worked well.

The problem is that I have to adress each object of the regression within the function boot.ci with an index (like index=1), because boot.ci doesn't know the names of my regression model coefficients.

So I did the following:

for (i in 2:inputnumberobjects)
  {
   cat(paste("BOOT CONFIDENCE INTERVALS FOR COEFFICIENT ", inputnamesobjects[i], ":\n\n", sep=""))
   boot.ci(bootResults, type = "bca", index=i) ### Result for Coefficients
  }

Before the loop I spefified the number of objects and the names of the objects.

The problem is, that the function somehow seems to ignore the boot.ci Function within the loop.

For example if the names of the objects are inputnamesobjects <- c("a", "b", "c", "d")

then I get the following output:

BOOT CONFIDENCE INTERVALS FOR COEFFICIENT a:

BOOT CONFIDENCE INTERVALS FOR COEFFICIENT b:

BOOT CONFIDENCE INTERVALS FOR COEFFICIENT c:

BOOT CONFIDENCE INTERVALS FOR COEFFICIENT d:

What I didn't get, is the results of boot.ci

If I#m not using a loop and instead use something like:

boot.ci(bootResults, type = "bca", index=2)

everything works fine.

Any ideas?

回答1:

I'm using the example data from the function help for boot.ci since you haven't included any. Some functions need to be forced to print when they're inside other functions, often using the function print. Copy the format of this:

library(boot)
ratio <- function(d, w) sum(d$x * w)/sum(d$u * w)
city.boot <- boot(city, ratio, R = 999, stype = "w", sim = "ordinary")

for (i in letters[1:5]) {
   cat("This is number:\n", i, "\n")
   print(boot.ci(city.boot, conf = c(0.90, 0.95),type = c("bca")))
}

Notice that you don't need to paste inside of cat. But in general it is good to avoid cat as print is a slightly gentler function. Using cat can lead to annoying messages that are hard later.

In future, please supply reproducible examples! (And let us know which packages you're using!)



回答2:

If you just want to see the output, wrap your function in a print command.

for (i in 2:inputnumberobjects)
  {
   cat(paste("BOOT CONFIDENCE INTERVALS FOR COEFFICIENT ", inputnamesobjects[i], ":\n\n", sep=""))
   print(boot.ci(bootResults, type = "bca", index=i)) ### Result for Coefficients
  }


回答3:

Automatic printing is turned off inside a loop, just as it is inside a function. You need to explicitly print something if you want to see the output.

for (i in 2:inputnumberobjects)
{
   cat(paste("BOOT CONFIDENCE INTERVALS FOR COEFFICIENT ", inputnamesobjects[i], ":\n\n", sep=""))
   print(boot.ci(bootResults, type = "bca", index=i)) ### Result for Coefficients
}

Hope that helps.



标签: r for-loop