试图在R

时间:2015-05-16 16:03:44

标签: r

在编程的最后几天收集了几个问题。试图制定一个程序来预测工作5年后我得到多少钱。 一个问题是当我试图把钱拿出去时。

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

然后它给出了这个错误:"二元运算符"

的非数字参数

我想从每年的功能"摘要"中提取信息。但它并没有真正奏效......它只是表明:

  

长度等级模式[1,] 100 -none-数字

最后,我想预测一下我将获得多少假期。 图表工作但我想在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 个答案:

答案 0 :(得分:1)

您在致电moneyover.year[i] = blah blah blah时收到错误,因为您尚未初始化moneyover.year而您无法接受或分配尚不存在的矢量子集。 (你已经启动moneyover而不是moneyover.year ...)。

初始化只是编程的一个事实,但您可以使用多个赋值来一次初始化多个变量,如:

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

第二个错误与R的类型转换有关。具体来说,在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()