【问题标题】:dataframe does not work inside of a function数据框在函数内部不起作用
【发布时间】:2012-04-06 16:13:50
【问题描述】:

当尝试在函数内部生成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 中,调用函数 f 时没有生成 data.frame

> 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

【问题讨论】:

    标签: r function dataframe


    【解决方案1】:

    这应该不足为奇。您没有在函数中的任何地方指定函数应该返回的内容。这可以像在 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 &lt;- f(data)


    还有另一种选择,在你的函数中使用&lt;&lt;-

    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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多