首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ifelse ( data.frame (TRUE,data.frame(1),0)) != data.frame(1)?

为什么ifelse ( data.frame (TRUE,data.frame(1),0)) != data.frame(1)?
EN

Stack Overflow用户
提问于 2011-06-11 02:46:03
回答 1查看 4.6K关注 0票数 26

如果为TRUE,则希望从函数返回data.frame,否则使用return(ifelse(condition, mydf, NA))返回NA

但是,ifelse将从data.frame中剥离列名。

为什么这些结果是不同的?

代码语言:javascript
复制
> data.frame(1)
  X1
1  1
> ifelse(TRUE, data.frame(1), NA)
[[1]]
[1] 1

来自dput()的一些其他见解:

代码语言:javascript
复制
> dput(ifelse(TRUE, data.frame(1), 0))
list(1)
> dput(data.frame(1))
structure(list(X1 = 1), .Names = "X1", row.names = c(NA, -1L), 
          class = "data.frame")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-11 02:52:11

ifelse通常用于矢量化比较,并且具有如下副作用:正如它在?ifelse中所说的,

代码语言:javascript
复制
‘ifelse’ returns a value with the same shape as ‘test’ ...

所以在这种情况下(test是一个长度为1的向量),它试图将数据帧转换为一个长度为1的“向量”(在这种情况下是列表)……

代码语言:javascript
复制
return(if (condition) mydf else NA)

作为一个通用的设计点,我尽量返回相同结构的对象,所以我可能更喜欢

代码语言:javascript
复制
if (!condition) mydf[] <- NA
return(mydf)

一般来说,我发现R用户(特别是来自其他编程语言的用户)一开始只使用if,花一段时间来发现ifelse,然后过度使用它一段时间,然后发现您确实想在逻辑上下文中使用if。类似的事情也发生在&&&上。

另请参阅:

帕特里克·伯恩斯的 ...

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

https://stackoverflow.com/questions/6310733

复制
相关文章

相似问题

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