与lapply相比 - 为什么不在这里工作?

时间:2016-07-14 11:39:46

标签: r lapply with-statement

我正在尝试学习R并且无法确定何时适当地使用 。我在考虑这个例子:

目标是将“dstr”和“death”在整个数据帧“stroke”(在ISwR数据库中)转换为日期格式,以多种方式(仅用于练习)。我设法这样做了:

#applying a function to the whole data frame - use the fact that data frames are lists actually
rawstroke=read.csv2(system.file("rawdata","stroke.csv",package="ISwR"),na.strings=".")
names(rawstroke)=tolower(names(rawstroke))
ix=c("dstr","died")
rawstroke[ix]=lapply(rawstroke[ix],as.Date,format="%d.%m.%Y")
head(rawstroke)

但是,当我尝试使用with function时,它不会将数据帧作为输出,而只会写入函数myfun的定义。这是我试过的代码。

myfun=function(x)
{y=as.Date(x,format="%d.%m.%Y")
 return(y)}
rawstroke=read.csv2(system.file("rawdata","stroke.csv",package="ISwR"),na.strings=".")
names(rawstroke)=tolower(names(rawstroke))
ix=c("dstr","died")
bla=with(rawstroke[ix],myfun)
head(bla)

如果有人可以帮我这个,那就太好了。

1 个答案:

答案 0 :(得分:2)

是的,这似乎不是with的工作。要在此处使用您的功能,您只需使用as.Date替换第一个代码中的myfun,然后删除格式参数,例如

rawstroke[ix]=lapply(rawstroke[ix], myfun)

with用于更清晰地访问数据框架和环境中的变量。例如,而不是

t.test(dat$x, dat$y)

你可以做到

with(dat, t.test(x, y))