代码如下:
library(data.table)
data<-data.table(red=1:4,green=2:5) # 生成数据
plot(x=c(1,4),y=c(min(data)-1,max(data)+1),
type='p',xlab='x',ylab="y",col='white') # 新建画布
data[,lapply(.SD,function(y){(lines(x=1:4,y,col=names(y)))})]
# 当把上面这句换成以下 for 循环时,可以实现
# for(i in names(data)){
# print(lines(x=1:4,data[[i]],col=i))
# }
我对data[,lapply(.SD,function(y){(lines(x=1:4,y,col=names(y)))})]
的理解是这样子的:
首先,特殊符号.SD
是选中了数据data
的全部列,每一列即是一个列表;
其次,由于函数lapply()
是作用到列表并以列表的形式返回,那么lapply()
将会对data
的每一列运行这一画图匿名函数:function(y){(lines(x=1:4,y,col=names(y)))})
。结果应当会依次呈现在上面plot()
语句新建的画布中。
但最后却没有这样子,请问这是为什么呀?在不经过数据变形的情况下,有修改的办法吗?谢谢!