【发布时间】:2016-07-14 11:39:45
【问题描述】:
我正在尝试学习 R,但无法真正弄清楚何时适当地使用 with。我在想这个例子:
目标是以多种方式将整个数据帧“stroke”(在 ISwR 数据库中)中的“dstr”和“die”转换为日期格式(仅供练习)。我已经设法做到了:
#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()以某种方式循环了环境变量,但事实并非如此。它甚至与lapply()不一样。在控制台中查看源代码with.default。它基本上只是一种访问环境的简单而干净的方式。
标签: r lapply with-statement