2017-02-17 2 views
0

Я пытаюсь заменить R c(1/2, 1, sqrt(2)/2) на rscale = с использованием sapply(). Но мне интересно, почему я получаю 3 одинаковых ответа (должен получить 3 разных ответа)?sapply() misbehaving in R

ttype = 1 
t = -.742 
N1 = 102 
N2 = ifelse(ttype==1, NA, 102) 

rscale = sqrt(2)/2 
tl = 1  
dexp = -1 

library(BayesFactor) 

Gi1 <- ttest.tstat(t, N1, ifelse(ttype==1, F, N2),nullInterval = 
c(ifelse(dexp==-1, -Inf, Inf), ifelse(tl==1, 0, Inf)),rscale = rscale, simple = TRUE) 

UrUr <- sapply(c(1/2, 1, sqrt(2)/2), function(rscale) Gi1)## HERE I get 3 same answers! 
+1

Gi1 - это число, а не функция ... – HubertL

+0

@HubertL, спасибо, как я могу справиться с тем, что с учетом условий ifelse(), которые у меня есть в Gi1? – rnorouzian

+1

только 'sapply (c (1/2, 1, sqrt (2)/2), function (rscale) ttest.tstat (t, N1, ifelse (ttype == 1, F, N2), nullInterval = c (ifelse (dexp == - 1, -Inf, Inf), ifelse (tl == 1, 0, Inf)), rscale = rscale, simple = TRUE)) ' – HubertL

ответ

2

Как @HubertL сказал, Gi1 - это число, а не функция. Вам нужно написать функцию, которая принимает параметр и вычисляет ttest.tstat на нем, подключая новую переменную к параметру «rscale». Например,

library(BayesFactor) 

Gi1 <- function(x) { 
ttest.tstat(t, N1, ifelse(ttype==1, F, N2), 
nullInterval = c(ifelse(dexp==-1, -Inf, Inf), 
ifelse(tl==1, 0, Inf)),rscale = x, simple = TRUE) } 

UrUr <- sapply(c(1/2, 1, sqrt(2)/2), Gi1) 
UrUr 

И вы должны получить три разных ответа.

1

Согласен с предыдущими ответами. Вы также можете попробовать использовать sapply как это:

sapply(c(1/2, 1, sqrt(2)/2), function(x) ttest.tstat(t, N1, ifelse(ttype==1, F, N2),nullInterval = c(ifelse(dexp==-1, -Inf, Inf), ifelse(tl==1, 0, Inf)),rscale = x, simple = TRUE)) 

Sapply будет затем цикл через вектор с помощью параметра «х» в качестве заполнителя для каждого элемента в вашем вектора с.

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