我试图将两个函数与R中的循环组合,并创建一个图,其中两个Y向量相对于公共X向量绘制。 我已经能够分别编写和绘制每个函数。 我不知道如何将这两个函数结合起来并将它们放在一个图中。还有,有没有办法导出结果向量,以便我可以在循环外使用该数据?我的载体"结果"不存储在环境中。
#Function #1:
k=1000
x=seq(from=1, to=k, by=1)
sumfun<-function(y){
sum<-0
result<-vector(mode="numeric")
for(i in 1:k) {
sum=sum+(1/i)
result[i]<-sum
}
plot(x,result, log="y",xlab="k",ylab="1, 1+1/2,..+1/k")
}
sumfun(x)
#Function #2
k=1000
x=seq(from=1, to=k, by=1)
sumfun<-function(y){
sum<-0
result<-vector(mode="numeric")
for(i in 1:k) {
sum=sum+(1/i)^2
result[i]<-sum
}
plot(x,result, log="y", xlab="k",ylab="1, 1+(1/2)^2,..+(1/k)^2")
}
sumfun(x)
答案 0 :(得分:1)
总结一下,使用@ bala83的sapply
尝试将您的矢量存储在环境中。
y1 <- cumsum(sapply(1:k, function(i) 1/i)) # results from your 1st function
y2 <- cumsum(sapply(1:k, function(i) 1/i^2)) # results from 2nd
然后使用points()
作为@John Coleman评论的第二个情节。
plot(y1, xlab="k",ylab="1, 1+(1/2)^2,..+(1/k)^2") # plots 1st
points(y2) # adds 2nd to the plot
<强> 给出: 强>
如果您想绘制线条并有图例,请执行此操作
plot(y1, xlab="k",ylab="1, 1+(1/2)^2,..+(1/k)^2", type = "l")
points(y2, type = "l", col="red")
legend(720, 6.7,
c("Results 1","Results 2"),
lwd=c(1,1), cex=.8, col=c("black","red"))
<强> 给出: 强>
答案 1 :(得分:1)
您甚至不需要申请,累积金额有一个现成的功能。我提供了一个用ggplot库绘制的解决方案,它比基础R绘图更受欢迎
library(reshape2)
library(ggplot)
library(tidyverse)
k=1000
result1=cumsum(1/seq(from=1, to=k, by=1))
result2=cumsum(1/seq(from=1, to=k, by=1)^2)
x=1:k
df=tibble(x,result1,result2)%>%melt(measure.vars=c("result1","result2"))
ggplot(df)+geom_point(aes(x=x,y=value,col=variable))+ylab("1, 1+1/2,..+1/k")+xlab("k")
答案 2 :(得分:0)
使用apply比循环更快。您的结果现在也在父母环境中。
library(ggplot2)
k=1000
y1 = cumsum(sapply(1:k, function(i) 1/i))
y2 = cumsum(sapply(1:k, function(i) 1/i**2))
df = data.frame("y"=c(y1,y2), "sum.type"=as.factor(rep(c("1","2"),each=k)))
ggplot(df,aes(c(1:k,1:k),log(y),color=sum.type)) + geom_point()+xlab("k")+ylab("Sum")+theme_classic()