0

在尝试生成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)

在我的 Rstudiodata.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
4

1 回答 1

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"
于 2013-03-23T18:56:18.543 回答