Прежде всего - я прошу прощения за плохо сформулированный вопрос, если у вас есть какие-либо более подходящие предложения для него, я весь слух!
Я написал функцию, которая добавляет новую переменную в мою 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))
Функция для "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" в переменной x_or_y
. Я уверен, что это действительно очень простое решение, но я не могу его найти - помогите Stack Overflow!