gpt4 book ai didi

r - 使用千位分隔符格式化 tibble 中的数值会出现错误

转载 作者:行者123 更新时间:2023-12-02 19:21:06 26 4
gpt4 key购买 nike

library(tidyverse)

separator <- function(x){
format(as.numeric(x), big.mark = ".", decimal.mark = ",")
}

x <- c(1000)
y <- c(1000)
z <- c(1000)
df <- tibble(x, y, z)

df[ , 2:ncol(df)] <- apply(df[ , 2:ncol(df)], 2, separator)

错误:

Error: Assigned data `apply(df[, 2:ncol(df)], 2, separator)` must be compatible with existing data.
x Existing data has 1 row.
x Assigned data has 2 rows.
i Row updates require a list value. Do you need `list()` or `as.list()`?
Run `rlang::last_error()` to see where the error occurred.

为什么会发生这种情况?为什么新数据突然有2行了?它应该只保留 1 行并添加千位分隔符,从第二个变量开始到结束。

如果它是一个 data.frame,R 不会提示,只是完成工作,但不会使用 tibble。我知道 tibbledata.frames 存在一些差异,但我找不到发生这种情况的原因。

编辑(由 Ric S 指出):该代码适用于具有多行的 tibble,但不适用于“one-row-tibble” ”。

最佳答案

使用lapply:

df[ , 2:ncol(df)] <- lapply(df[ , 2:ncol(df)], separator)

如果您发布了完整错误/警告消息,那就很清楚了:

# Error: Assigned data `apply(df[, 2:ncol(df)], 2, separator)` must be compatible with existing data.
# x Existing data has 1 row.
# x Assigned data has 2 rows.
# i Row updates require a list value. Do you need `list()` or `as.list()`?
# Run `rlang::last_error()` to see where the error occurred.

然后我们可以检查分配是否兼容,即:list类:

is.list(apply(df[ , 2:ncol(df)], 2, separator))
# [1] FALSE
is.list(lapply(df[ , 2:ncol(df)], separator))
# [1] TRUE
is.list(df[ , 2:ncol(df)])
# [1] TRUE

关于r - 使用千位分隔符格式化 tibble 中的数值会出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63050218/

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