我正在尝试学习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)
如果有人可以帮我这个,那就太好了。
答案 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))