这是R中的代码,我很难理解function(x)和qdata[[x]]在这行代码中的角色。有没有人能一件一件地给我详细阐述一下?这些代码不是我写的。谢谢
outs=lapply(names(qdata[,12:35]), function(x)
hist(qdata[[x]],data=qdata,main="Histogram of Quality Trait",
xlab=as.character(x),las=1.5)$out)发布于 2020-01-09 09:03:37
此代码生成一系列直方图,每个直方图对应于dataframe qdata的第12列到第35列。lapply函数对列进行迭代。在每次迭代中,当前列的名称作为参数"x“传递给由" function (x)”定义的匿名函数。函数体是对hist()函数的调用,该函数创建直方图。qdata[x]从该列中提取数据。我实际上被"data=qdata“搞糊涂了。
发布于 2020-01-09 10:03:57
我们没有名为qdata的数据对象,因此我们不能真正确定这段代码会发生什么。这段代码的作者似乎试图将函数调用中名为outs的组件的值传递给hist。如果qdata是一个普通的数据帧,那么我怀疑这段代码将无法实现这个目标,因为hist函数没有out组件。(查看?hist的输出。当我用一个简单的数据帧运行它时,我确实得到了出现在我的交互式绘图设备上的直方图,但我得到了outs组件的NULL值。此外,这12个警告是由于hist函数缺少data参数引起的。
qdata <- data.frame(a=rnorm(10), b=rnorm(10))
outs=lapply(names(qdata), function(x)
hist(qdata[[x]],data=qdata,main="Histogram of Quality Trait",
xlab=as.character(x),las=1.5)$out)
#There were 12 warnings (use warnings() to see them)
> str(outs)
List of 2
$ : NULL
$ : NULL所以我认为我们需要关注这段代码的作者的R知识水平。有可能我对这个假设是错误的。hist函数是通用的,当传递具有特定类的向量时,某些未引用的包可能具有用于处理数据对象和返回outs值的函数。然而,在只加载基本包的典型启动情况下,只有三个hist.*函数:
methods(hist)
#[1] hist.Date* hist.default hist.POSIXt*
#see '?methods' for accessing help and source code关于function和[[x]]的角色问题:关键字function返回一个语言对象,该对象可以接收参数值,然后执行操作,最后返回结果。在这种情况下,数据被传递给匿名函数,并依次成为本地名称、x和该值,该值被'[['-function用来在我假定为‘qdata’的数据帧中查找列。
https://stackoverflow.com/questions/59655797
复制相似问题