当尝试在函数内部生成data.frame
时,发现在调用函数时,尽管一切显然在函数之外运行良好,但未生成data.frame
。
任何人都可以告诉我这怎么可能?
Species=c("a","b","c")
data=data.frame(Species)
df=data.frame(matrix(nrow=length(levels(data$Species)),ncol=43))
rm(df)
f<-function(data)
{
df=data.frame(matrix(nrow=length(levels(data$Species)),ncol=43))
}
f(data)
在我的Rstudio中,调用函数data.frame
时生成f
!
> sessionInfo()
R version 2.14.1 (2011-12-22)
Platform: x86_64-pc-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_Australia.1252
LC_CTYPE=English_Australia.1252
LC_MONETARY=English_Australia.1252
[4] LC_NUMERIC=C LC_TIME=English_Australia.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] plyr_1.7.1 maptools_0.8-14 lattice_0.20-0 foreign_0.8-48
geosphere_1.2-26
[6] rgdal_0.7-8 outliers_0.14 XML_3.9-4.1 PBSmapping_2.62.34
dismo_0.7-14
[11] raster_1.9-58 sp_0.9-93
loaded via a namespace (and not attached):
[1] grid_2.14.1 tools_2.14.1
答案 0 :(得分:0)
这应该不足为奇。您尚未在函数中的任何位置指定函数应返回的内容。这可以像在R中显示在命令提示符下创建的对象一样完成:键入对象的名称。或者,您可以使用return()
。
换句话说,修改你的函数如下(我已将“df”更改为“mydf”,将“data”更改为“mydata”以避免与基本R函数发生任何潜在冲突):
f <- function(mydata)
{
mydf = data.frame(matrix(nrow=length(levels(data$Species)), ncol=43))
mydf
## Or, more explicitly
## return(mydf)
}
您现在可以使用f(data)
运行它。但请注意,这只会显示输出,而不是将其分配给对象。如果您希望将其分配给对象(例如“mydf”),则需要使用mydf <- f(data)
。
还有另一个选项,在你的函数中使用<<-
。
f <- function(mydata)
{
mydf <<- data.frame(matrix(nrow=length(levels(data$Species)), ncol=43))
## uncomment the next line if you want to *display* the output too
## mydf
}
> rm(mydf)
> ls(pattern = "mydf")
character(0)
> f(data) ## No ouput is displayed when you run the function
> ls(pattern = "mydf")
[1] "mydf"