首先 - 我为这个措辞严厉的问题道歉,如果你有任何更合适的建议,我全都耳朵!
我编写了一个函数,根据调用的对象在我的df中添加一个新变量。例如,我有x_data
,当我将它放入我的函数时,会创建一个名为x_or_y
的新变量,所有条目都显示为" x"。你猜对了 - 还有一个y_data
,当插入到函数中时,它会创建相同的变量x_or_y
,并用" y"
我遇到了一些问题但是当我有一个dfs(x_data
和y_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))
&#34; x或y&#34;:
的功能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
变量中有&#34; x&#34;&#39;在这里我确定它是一个非常简单的解决方案,但我似乎无法忍受找到它 - 请帮助Stack Overflow!
答案 0 :(得分:1)
如果您正在使用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)