R和';plm&x27;软件包:如何使用lappy在';pdata.frame';对象

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)!

我正在使用“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)!="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)