2015-05-16 2 views
0

Собрано несколько вопросов в течение последних дней программирования. Попытка сделать программу, которая прогнозирует, сколько денег я получаю после работы в течение 5 лет. Одна проблема заключается в том, что я пытаюсь взять деньги за вычетом денег.Попытка сделать модель прогнозирования в R

moneyover.year[i] = moneyin.year[i] - moneyout.year[i] 

Затем он дает эту ошибку: «нечисловой аргумент для бинарного оператора»

Я хотел бы, чтобы извлечь информацию из каждого года с функцией «Резюме», но это на самом деле не работает .. . Это просто показывает:

Length Class Mode [1,] 100 -none- numeric

Наконец-то я хочу предсказать, сколько дней я получу. Граф работает, но я хочу получить знак процента на оси y. Предпочтительно гладкая кривая с гистограммой.

Вот полный код:

library(ggplot2) 
library(mc2d) 
library(scales) 
moneyin.year= NULL # Is there a work around this? 
moneyout.year= NULL # Is there a work around this? 
moneyover.year = NULL # Is there a work around this? 
n=100 

for (i in 1:5) { 
    moneyin.year[i] <- list(rpert(n, min=20000, mode=23000, max=30000, shape=30)) 
    moneyout.year[i] <- list(rpert(n, min=10000, mode=12500, max=19500, shape=20)) 
    moneyover.year[i] = moneyin.year[i] - moneyout.year[i] # GIVES ERROR! 
} 
moneyin.year 
moneyout.year 
moneyover.year # GIVES ERROR! 

#graph = moneyover.year[1] 
graph = moneyin.year[1] 
summary(graph) # Doesnt really work... 
sd(graph) # GIVES ERROR! 
var(graph) # GIVES ERROR! 

p <- ggplot(data.frame(graph), aes(x = graph)) 
p <- p + geom_bar(aes(y = (..count..)/sum(..count..)), color="black", binwidth = 500, fill = "steelblue") 
p <- p + scale_y_continuous(labels = percent) 
p <- p + xlab("EUR") + ylab("Percent") 
p <- p + theme_bw() 
print(p) 


extraholidays = dpois(20:50,30) 
barplot(extraholidays,names=20:50,xlab='Days',ylab='Percentage') 
# How to get "%" sign??? 
# How to get a smooth line? 
+1

Добро пожаловать в StackOverflow! Этот вопрос не совсем [воспроизводимый] (stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example), так как некоторые определения функций отсутствуют (например, 'rpert'), и это трудно помочь, не зная, что делает ваш код. Пожалуйста, включите вызовы в 'library' или определение' rpert', если это заданный пользователем вопрос. – Jthorpe

+0

Извините! Я начал программировать в R несколько дней назад. Теперь они включены. – crystal

ответ

1

Вы получаете сообщение об ошибке, когда вы звоните moneyover.year[i] = blah blah blah, потому что вы не инициализированы moneyover.year и вы не можете принять или назначить подмножество вектора, который не но существуют. (вы инициализировали moneyover, а не moneyover.year ...).

Initilization просто факт программирования, но вы можете использовать множественное присваивание инициализировать несколько переменных одновременно, как в:

moneyin.year <- moneyout.year <- moneyover.year <- NULL 

Вторая ошибка связана с преобразованием типа АиРа. В частности, в первой итерации цикла for эта строка moneyin.year[i] <- list(blah blah blah) принуждает moneyin.year к списку. Это проблема, когда эта линия оценивается:

moneyover.year[i] = moneyin.year[i] - moneyout.year[i] 

, так как один оператор скобки ([) возвращает вложенный список, а не первый элемент списка. Это проблема, потому что минус-оператор (-) не определен для списков (следовательно, несколько неинтуитивная ошибка «нечисловой аргумент для двоичного оператора»). Вместо этого вы хотите использовать оператор двойной скобки ([[), который возвращает значение, хранящееся в элементе списка i. как в:

moneyover.year[[i]] = moneyin.year[[i]] - moneyout.year[[i]] 

Поскольку все три из объектов выше списков, это может сэкономить на путанице, чтобы инициализировать их в виде списков, а не как NULL значений, например:

moneyin.year <- moneyout.year <- moneyover.year <- list() 
+0

Правда, но даже с moneyover.year он дает ошибку. – crystal

+0

См. Исправления для исправлений ошибок – Jthorpe

+0

СПАСИБО! сводная информация (граф) ошибка была решена с помощью резюме (unlist (moneyover.year)). Теперь все почти сделано, за исключением двух последних вопросов. То есть: «Как получить знак«% »и как получить гладкую линию в распределении Пуассона. Знаете ли вы, как их решить? – crystal

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