R和';plm&x27;软件包:如何使用lappy在';pdata.frame';对象
我正在使用“plm”软件包进行一些模拟。我需要对给定数据集中的所有变量执行“内部”转换。“for”循环可以正常工作,而“lappy”版本则不行。我将数据集创建为:R和';plm&x27;软件包:如何使用lappy在';pdata.frame';对象,r,apply,plm,R,Apply,Plm,我正在使用“plm”软件包进行一些模拟。我需要对给定数据集中的所有变量执行“内部”转换。“for”循环可以正常工作,而“lappy”版本则不行。我将数据集创建为: library(plm) data<- data.frame(replicate(10, runif(100))) pdata <- pdata.frame(data, index=10) varlist <- names(pdata)[names(pdata)!=("id") & names(pdata)!
library(plm)
data<- data.frame(replicate(10, runif(100)))
pdata <- pdata.frame(data, index=10)
varlist <- names(pdata)[names(pdata)!=("id") & names(pdata)!="time"]
lappy版本失败:
pdata.with <- lapply(pdata[, varlist], Within)
给予
[1] "pseries" "numeric"
当
给予
我的问题:有没有一种方法可以在“pdata.frame”对象上使用“lappy”?正确的做法是,
lappy
以不同的方式访问pdata.frame
,这是由于pdata.frame
当前是如何定义的(对于with()
)通过以两种不同的方式查看class属性,可以看出这一点
如果要使用lappy
,可以先通过as.list
(plm:::as.list.pdata.frame
)的pdata.frame方法强制列表,并选择保留.attributes
,如下所示:
res <- data.frame(lapply(as.list(pdata[ , varlist], keep.attributes = TRUE), Within))
all.equal(pdata.with2, res, check.attributes = FALSE)
res谢谢你的回答。不幸的是,它似乎对我不起作用。我收到了相同的错误消息。我尝试了res,我将plm
升级到1.6-6,现在一切正常。在1.5-12中,未定义as.list
方法。再次感谢你的帮助
[1] "pseries" "numeric"
lapply(pdata[, varlist], class)
$X1
[1] "numeric"
...
res <- data.frame(lapply(as.list(pdata[ , varlist], keep.attributes = TRUE), Within))
all.equal(pdata.with2, res, check.attributes = FALSE)