gpt4 book ai didi

r - 使用 lapply 时功能的工作方式不同

转载 作者:行者123 更新时间:2023-12-02 15:51:40 24 4
gpt4 key购买 nike

首先 - 对于这个措辞不当的问题,我深表歉意,如果您有任何更合适的建议,我会洗耳恭听!

我编写了一个函数,根据对象的名称将新变量添加到我的 df 中。例如,我有 x_data,当我将其放入函数中时,会创建一个名为 x_or_y 的新变量,所有条目均显示“x”。您猜对了 - 还有一个 y_data,当插入到函数中时,它会创建相同的变量 x_or_y 并用“y”填充它

但是,当我有一个 dfs 列表(x_datay_data)并且我使用 lapply() 时,我遇到了一些问题列表 - 它只为所有内容返回相同的字母。请参阅下面我的示例。

示例:

set.seed(123)
x_data <- data.frame(A = rnorm(20),
B = rnorm(20))
y_data <- data.frame(A = rnorm(20),
B = rnorm(20))

“x 或 y”的函数:

add_x_or_y  <- function(z) {
z$x_or_y <- ifelse(grepl(pattern = "x",
deparse(substitute(z)), fixed = TRUE),
"x", "y")
z
}

所以尝试一下这个函数本身:

head(add_x_or_y(x_data),3)

A B x_or_y
1 -0.56047565 -1.0678237 x
2 -0.23017749 -0.2179749 x
3 1.5587083 -1.0260044 x

head(add_x_or_y(y_data),3)

A B x_or_y
1 -0.6947070 0.3796395 y
2 -0.2079173 -0.5023235 y
3 -1.2653964 -0.3332074 y

好的,这样就可以了 - 但在现实生活中,我需要大约 20 个不同的 dfs 来执行该函数。每次编写都会浪费大量空间,因此让我们创建一个列表并使用 lapply()

x_y_list <- list(x_data = x_data,
y_data = y_data)
x_y_list <- lapply(x_y_list, add_x_or_y)

head(x_y_list$x_data,3)
A B x_or_y
1 -0.5604756 -1.0678237 y
2 -0.2301775 -0.2179749 y
3 1.5587083 -1.0260044 y

head(x_y_list$y_data,3)
A B x_or_y
1 -0.6947070 0.3796395 y
2 -0.2079173 -0.5023235 y
3 -1.2653964 -0.3332074 y

没成功! :( 第一个应该在 x_or_y 变量中包含“x”。我确信这是一个非常非常简单的解决方案,但我似乎找不到它 - 请帮助 Stack Overflow!

最佳答案

如果您使用lapply,您只是传递没有名称的数据框。也许如果你稍微改变一下方法:

set.seed(123)
x_data <- data.frame(A = rnorm(20),
B = rnorm(20))
y_data <- data.frame(A = rnorm(20),
B = rnorm(20))

add_x_or_y <- function(df, df_name) {
df$x_or_y <- ifelse(grepl("x", df_name) == TRUE, "x", "y")
df
}

x_y_list <- list(x_data = x_data,
y_data = y_data)

x_y_list <- mapply(add_x_or_y,
x_y_list,
names(x_y_list), SIMPLIFY = FALSE)

head(x_y_list$x_data, 3)
head(x_y_list$y_data, 3)

关于r - 使用 lapply 时功能的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50453818/

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