在编程的最后几天收集了几个问题。试图制定一个程序来预测工作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?
答案 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()