【发布时间】:2018-07-12 12:05:48
【问题描述】:
我正在使用“plm”包进行一些模拟。我需要对给定数据集中的所有变量进行“内部”转换。 “for”循环可以正常工作,而“lapply”版本则不行。我将数据集创建为:
library(plm)
data<- data.frame(replicate(10, runif(100)))
pdata <- pdata.frame(data, index=10)
varlist <- names(pdata)[names(pdata)!=("id") & names(pdata)!="time"]
我可以对单个变量运行“内部”转换,例如:Within(pdata$X1) 有效。或者我可以运行一个“for”循环,它也可以:
pdata.with2 <- pdata[, varlist]
for(i in 1:ncol(pdata.with2)){
pdata.with2[,i]= Within(pdata[,i])
}
lappy版本失败:
pdata.with <- lapply(pdata[, varlist], Within)
并给出错误:“UseMethod("Within") 中的错误: 'Within' 没有适用于类“c('double', 'numeric')”的对象的方法。似乎“lapply”循环遍历变量的方式错过了一些使“pseries”类的列成为“数字”的属性。举个例子
class(pdata$X1)
给了
[1] "pseries" "numeric"
同时
lapply(pdata[, varlist], class)
给予
$X1
[1] "numeric"
...
我的问题:有没有办法在“pdata.frame”对象上使用“lapply”?
【问题讨论】: