使用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

df1Use
evaluate=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