使用LAPPY或for循环来添加_轨迹不起作用
使用数据帧列表时,如何在循环中添加_跟踪 我使用下面的代码不断得到以下信息使用LAPPY或for循环来添加_轨迹不起作用,r,plotly,R,Plotly,使用数据帧列表时,如何在循环中添加_跟踪 我使用下面的代码不断得到以下信息 df1<-c(seq(1:32)) df2<-df*2 df3<-df2*8 dff1<-sqrt(df1) dff2<-sqrt(df2) dff3<-sqrt(df3) a<-cbind.data.frame(df1,dff1) b<-cbind.data.frame(df2,dff2) c<-cbind.data.frame(df3,dff3) colnam
df1<-c(seq(1:32))
df2<-df*2
df3<-df2*8
dff1<-sqrt(df1)
dff2<-sqrt(df2)
dff3<-sqrt(df3)
a<-cbind.data.frame(df1,dff1)
b<-cbind.data.frame(df2,dff2)
c<-cbind.data.frame(df3,dff3)
colnames(a)<-c("df1","df2")
colnames(b)<-c("df1","df2")
colnames(c)<-c("df1","df2")
df<-list()
df[[1]]<-a
df[[2]]<-b
df[[3]]<-c
pl<-plot_ly()
for(i in 1:3){
pl<- add_trace(pl,data=df[[i]],x=~df[[i]]$df1,y=~df[[i]]$df2,mode='lines',type='scatter')
}
pl
df1虽然其他用户已经正确地注意到,这可以通过for循环简单地完成,但我想,对于任何未来遇到这个问题的人,我最好回答如何使用lappy()来完成
这可以通过使用get()方法使用lappy()完成,该方法允许您在检索变量时指定环境。使用invisible()包装Lappy可以防止循环在运行时将中间产物打印到console/viewer
代码如下:
df1<-c(seq(1:32))
df2<-df1*2
df3<-df2*8
dff1<-sqrt(df1)
dff2<-sqrt(df2)
dff3<-sqrt(df3)
a<-cbind.data.frame(df1,dff1)
b<-cbind.data.frame(df2,dff2)
c<-cbind.data.frame(df3,dff3)
colnames(a)<-c("df1","df2")
colnames(b)<-c("df1","df2")
colnames(c)<-c("df1","df2")
df<-list()
df[[1]]<-a
df[[2]]<-b
df[[3]]<-c
pl<-plot_ly()
invisible(lapply(seq_along(df), FUN = function(i) {
pl <<- get("pl", envir = globalenv()) %>%
add_trace(pl,data=df[[i]],x=~df[[i]]$df1,y=~df[[i]]$df2,mode='lines',type='scatter')
}))
pl
df1Useevaluate=TRUE
在add\u trace
中。我从其他帖子知道add\u trace中evaluate=TRUE。但是这不起作用,我认为你的问题在于对x
和y
使用美元符号符号,而不是直接引用变量。改用data=df[[i]],x=~df1,y=~df2
。由于plotly 4.0计算是强制的,因此evaluation=TRUE
适用于循环。我使用Lappy做了同样的更改,它仍然生成三个单独的图形。有没有办法让Lappy以类似循环的方式添加跟踪,而不是创建三个单独的图表这三个单独的图表与apply
系列的工作方式有关。有关如何通过assign
或
df1<-c(seq(1:32))
df2<-df1*2
df3<-df2*8
dff1<-sqrt(df1)
dff2<-sqrt(df2)
dff3<-sqrt(df3)
a<-cbind.data.frame(df1,dff1)
b<-cbind.data.frame(df2,dff2)
c<-cbind.data.frame(df3,dff3)
colnames(a)<-c("df1","df2")
colnames(b)<-c("df1","df2")
colnames(c)<-c("df1","df2")
df<-list()
df[[1]]<-a
df[[2]]<-b
df[[3]]<-c
pl<-plot_ly()
invisible(lapply(seq_along(df), FUN = function(i) {
pl <<- get("pl", envir = globalenv()) %>%
add_trace(pl,data=df[[i]],x=~df[[i]]$df1,y=~df[[i]]$df2,mode='lines',type='scatter')
}))
pl