如果为TRUE,则希望从函数返回data.frame,否则使用return(ifelse(condition, mydf, NA))返回NA
但是,ifelse将从data.frame中剥离列名。
为什么这些结果是不同的?
> data.frame(1)
X1
1 1
> ifelse(TRUE, data.frame(1), NA)
[[1]]
[1] 1来自dput()的一些其他见解:
> 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")发布于 2011-06-11 02:52:11
ifelse通常用于矢量化比较,并且具有如下副作用:正如它在?ifelse中所说的,
‘ifelse’ returns a value with the same shape as ‘test’ ...所以在这种情况下(test是一个长度为1的向量),它试图将数据帧转换为一个长度为1的“向量”(在这种情况下是列表)……
return(if (condition) mydf else NA)作为一个通用的设计点,我尽量返回相同结构的对象,所以我可能更喜欢
if (!condition) mydf[] <- NA
return(mydf)一般来说,我发现R用户(特别是来自其他编程语言的用户)一开始只使用if,花一段时间来发现ifelse,然后过度使用它一段时间,然后发现您确实想在逻辑上下文中使用if。类似的事情也发生在&和&&上。
另请参阅:
帕特里克·伯恩斯的 ...
的
https://stackoverflow.com/questions/6310733
复制相似问题