2017-06-20 28 views
0

我不知道我怎么能拿矢量x的整个元素for-loop后很像我得到的矢量ts的元素在我下面的R代码里面:如何在R中绘制for循环之后获取x中的整个元素?

if(!require(BayesFactor)){install.packages('BayesFactor')} ; library(BayesFactor) 

ts = numeric(5) 
x = numeric(5) 

for(i in 1:5){ 

x = c(1, 3, 10, 30, 100)[i] 

f <- function(t){ 
abs(ttest.tstat(t, 50, 50, rscale = sqrt(2)/2, simple = TRUE)[[1]] - x) 
} 

ts[i] = optimize(f, interval = c(-6, 6))[[1]] 
    } 

plot(ts, x, t = "o") #`x` contains only the last element (i.e., 100) of the `x` vector above 

回答

2

您可以在循环之前启动x矢量,然后在循环中引用它。那样你以后还会有。

x = c(1, 3, 10, 30, 100) 

for(i in 1:5){ 

    x_int = x[i] 

    f <- function(t){ 
     abs(ttest.tstat(t, 50, 50, rscale = sqrt(2)/2, simple = TRUE)[[1]] - x_int) 
    } 

    ts[i] = optimize(f, interval = c(-6, 6))[[1]] 
} 

plot(ts, x, t = "o") 

下面是使用sapply(我没有测试过这一点,请测试自己,让我知道,如果它不按预期工作)的等效操作:

x = c(1, 3, 10, 30, 100) 

f <- function(t, x_int){ 
    abs(ttest.tstat(t, 50, 50, rscale = sqrt(2)/2, simple = TRUE)[[1]] - x_int) 
} 

ts <- sapply(x, function(i) optimize(f, interval = c(-6, 6), x_int = i)[[1]]) 

plot(ts, x, t = "o") 
+0

你当然可以使用“好吧”,是的。最主要的是创建你的'x'向量,然后引用它,而不是在循环的每次迭代中创建向量。这样,你就可以在需要的时候准备好整个矢量,无论是在循环内部还是外部。这同样适用于'for'和'sapply'。 – rosscova

+0

我已经添加了'sapply'解决方案,但是我没有安装'BayesFactor',请自行测试。 – rosscova

+0

当然,它工作正常,谢谢。 – rnorouzian

相关问题