With 与 lapply - 为什么 with 在这里不起作用?
With vs. lapply - why does with not work here?
我正在尝试学习 R,但无法确定何时适当地使用 with。我在想这个例子:
目标是通过多种方式将整个数据帧 "stroke"(在 ISwR 数据库中)中的 "dstr" 和 "died" 转换为日期格式(仅供练习)。我已经设法做到了:
#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 函数时,它没有将数据框作为输出,而是只写了函数 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)
如果有人能帮我解决这个问题,那就太好了。
是的,这看起来不像 with
的工作。要在此处使用您的函数,您只需将第一个代码中的 as.Date
替换为 myfun
并删除格式参数,例如
rawstroke[ix]=lapply(rawstroke[ix], myfun)
with
用于更干净地访问数据框和环境中的变量。例如,而不是
t.test(dat$x, dat$y)
你可以
with(dat, t.test(x, y))
我正在尝试学习 R,但无法确定何时适当地使用 with。我在想这个例子:
目标是通过多种方式将整个数据帧 "stroke"(在 ISwR 数据库中)中的 "dstr" 和 "died" 转换为日期格式(仅供练习)。我已经设法做到了:
#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 函数时,它没有将数据框作为输出,而是只写了函数 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)
如果有人能帮我解决这个问题,那就太好了。
是的,这看起来不像 with
的工作。要在此处使用您的函数,您只需将第一个代码中的 as.Date
替换为 myfun
并删除格式参数,例如
rawstroke[ix]=lapply(rawstroke[ix], myfun)
with
用于更干净地访问数据框和环境中的变量。例如,而不是
t.test(dat$x, dat$y)
你可以
with(dat, t.test(x, y))