Загрузка результатов цикла for в контейнер - PullRequest
0 голосов
/ 28 сентября 2018

Все ниже приведено в R.

Я пытаюсь сохранить результат результата цикла for в разных контейнерах, но каким-то образом я продолжаю получать предупреждения NA, и результаты не не хранится в моем контейнере.Даже пробовал разные контейнеры для разных циклов for внутри функции, а затем, наконец, матрицу для контейнеров, но кажется, что это не работает.

Уже пробовал разные решения в течение двух полных дней, и, похоже, должны быть такиепростое решение.Может быть, я просто больше не вижу себя ...

data.ols<-data.frame(cbind(rep(1),holiday,weathersit,atemp,hum,windspeed))
y<-as.vector(cnt)
z=c(holiday, weathersit, atemp, hum, windspeed)
z.names=c("holiday","weathersit","atemp","hum","windspeed")
result.container<-data.frame(matrix(nrow=6,ncol=4))
colnames(result.container)<-c("beta","SE","t-statistic","p-value")

ols<-function(y,X2,x=0){
X<-matrix(z, ncol=5)
X2<-cbind(rep(1, nrow(X)), X)
XXinv <- solve(t(X2) %*% X2, diag(ncol(X2))) # Compute (X'X)^-1
beta<-XXinv%*%t(X2)%*%y
print(beta)
result.container[,1]<-beta

result.testdebug<-vector()
for (i in c("V1","holiday","weathersit","atemp","hum","windspeed")){
SE<-sd(i)
result.testdebug[i]<-sd(data.ols[,i])
return(result.testdebug)
result.container[,2]<-result.testdebug}

result.testtvalue<-vector()
for (i in c("V1","holiday","weathersit","atemp","hum","windspeed")){
nominator<-(mean(i)-x)   
t.value <- nominator/sd(i)
return(t.value)
result.testtvalue<-t.value
result.container[,3]<-result.testtvalue}

df <- length(X)-1 
p.value <- 2*pt(t.value, df, lower.tail=FALSE)
return(p.value)
result.container[,4]<-p.value

list(rbind(beta,result.testdebug,t.value,p.value))}

1 Ответ

0 голосов
/ 28 сентября 2018

Кажется, у вас есть некоторые проблемы с функциями в R. В R функции имеют свое собственное окружение (то есть свой собственный набор объектов).Даже если они могут читать из своей родительской среды (множество всех объектов), они не могут писать в нее.Позвольте мне продемонстрировать это с помощью более простого кода.

teste2=matrix(,2,2)
teste=function(a,b) {teste2[,1]=c(a,b)}
teste(3,2)
teste2
    [,1] [,2]
[1,]   NA   NA
[2,]   NA   NA

Как видите, teste (функция) не может изменить teste2 (матрицу).

В R лучший способ создать функцию - дать ей все объекты, которые ей нужны, в качестве параметров, а к концу тела функции дать единственную функцию return(), которая дает конечный объект.

Вы сделали что-то похожее на это, но использовали несколько return() функций.R использует только первый return() и игнорирует остальные.См. Ниже:

teste=function(a,b) {c=a;return(c);d=b;return(d)}
teste(3,2)
[1] 3

Для вашего конкретного кода я рекомендую исключить все result.container <- и ставить return () только в конце, вокруг этого последнего (списка) </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...