ifelse(apply(myd-6ren">
gpt4 book ai didi

r - 为什么 apply 将数据帧中的逻辑转换为 5 个字符的字符串?

转载 作者:行者123 更新时间:2023-12-04 11:45:42 27 4
gpt4 key购买 nike

假设我有一个数据框:

mydf <- data.frame(colA = c(1,20), colB = c("a", "ab"), colC = c(T, F))

现在假设我想对数据框上的每一行应用一个函数。此函数使用 C 列的 bool 值。当使用 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 ,您的数据框已转换为字符矩阵。出现空格是因为每个元素都转换为列中最宽元素的宽度。

您可以使用 for环状 sapply称呼

> ( s <- sapply(seq(nrow(mydf)), function(i) mydf[i, 3]) )
# [1] TRUE FALSE
> class(s)
# [1] "logical"

解决您正在使用 apply 所做的事情的方法将会
> as.logical(gsub("\\s+", "", apply(mydf, 1, `[`, 3)))
# [1] TRUE FALSE

但请注意,这些都与
> mydf[,3]
# [1] TRUE FALSE

关于r - 为什么 apply 将数据帧中的逻辑转换为 5 个字符的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25854139/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com