【发布时间】:2014-11-09 08:08:37
【问题描述】:
假设我有一个数据框:
mydf <- data.frame(colA = c(1,20), colB = c("a", "ab"), colC = c(T, F))
现在假设我想对数据框中的每一行应用一个函数。此函数使用 C 列的布尔值。当使用apply 时,每个非字符串都将转换为列中存在的最大长度的字符串:
> apply(mydf, 1, '[', 3)
[1] " TRUE" "FALSE"
字符串" TRUE" 不再可解释为逻辑。
> ifelse(apply(mydf, 1, '[', 3), 1, 2)
[1] NA 2
我可以用gsub(" ", "", x) 解决这个问题,但我敢打赌有更好的方法。为什么apply 可以直接将逻辑转换为字符串时会有这种行为?是否有没有上述行为的apply-like 函数?
【问题讨论】:
-
确实如此。有没有这种行为的
apply-like 函数? -
查看包 plyr,它是基本应用功能的包装器。您可以使用 plyr 方法绕过这些强制影响