首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人能给我解释一下这段代码吗?特别是“函数x和[[x]]”的作用?

有人能给我解释一下这段代码吗?特别是“函数x和[[x]]”的作用?
EN

Stack Overflow用户
提问于 2020-01-09 08:52:48
回答 2查看 73关注 0票数 0

这是R中的代码,我很难理解function(x)qdata[[x]]在这行代码中的角色。有没有人能一件一件地给我详细阐述一下?这些代码不是我写的。谢谢

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2020-01-09 09:03:37

此代码生成一系列直方图,每个直方图对应于dataframe qdata的第12列到第35列。lapply函数对列进行迭代。在每次迭代中,当前列的名称作为参数"x“传递给由" function (x)”定义的匿名函数。函数体是对hist()函数的调用,该函数创建直方图。qdata[x]从该列中提取数据。我实际上被"data=qdata“搞糊涂了。

票数 2
EN

Stack Overflow用户

发布于 2020-01-09 10:03:57

我们没有名为qdata的数据对象,因此我们不能真正确定这段代码会发生什么。这段代码的作者似乎试图将函数调用中名为outs的组件的值传递给hist。如果qdata是一个普通的数据帧,那么我怀疑这段代码将无法实现这个目标,因为hist函数没有out组件。(查看?hist的输出。当我用一个简单的数据帧运行它时,我确实得到了出现在我的交互式绘图设备上的直方图,但我得到了outs组件的NULL值。此外,这12个警告是由于hist函数缺少data参数引起的。

代码语言:javascript
复制
 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.*函数:

代码语言:javascript
复制
methods(hist)
#[1] hist.Date*   hist.default hist.POSIXt*
#see '?methods' for accessing help and source code

关于function[[x]]的角色问题:关键字function返回一个语言对象,该对象可以接收参数值,然后执行操作,最后返回结果。在这种情况下,数据被传递给匿名函数,并依次成为本地名称、x和该值,该值被'[['-function用来在我假定为‘qdata’的数据帧中查找列。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59655797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档