#r
Вопрос:
Я хотел бы создать код, который берет различное количество X1, X2, X3...XN
кадров данных, содержащих четыре столбца данных time, height, start, group
, и автоматически запускает их с помощью определяемой пользователем функции HL_plot
Vulntookit
. Я предполагаю, что мог бы использовать цикл for, но я все еще очень новичок в R и немного застрял на этом шаге. Если я использую функцию вручную, код выглядит следующим образом:
HL.plot (level = X1[, 2], time = X1[, 1], period = 0.3,
phantom = TRUE, tides = "H")
HL.plot (level = X2[, 2], time = X2[, 1], period = 0.3,
phantom = TRUE, tides = "H")
HL.plot (level = X3[, 2], time = X3[, 1], period = 0.3,
phantom = TRUE, tides = "H")
HL.plot (level = XN[, 2], time = XN[, 1], period = 0.3,
phantom = TRUE, tides = "H")
Функция строит второй height
и первый time
столбцы данных.
Комментарии:
1. как насчет использования
Xnew <- rbind(X1, X2, X3,.. XN)
? это гарантирует, что все кадры данных будут объединены в один по строкам, так что вы можете использовать функцию прямо вXnew
2. Я не уверен, что понимаю. Я все еще борюсь с конкретным кодом, используемым для назначения
Xnew
неизвестному или изменяющемуся количеству кадров данныхX1, X2, X3, X4......
3. какую борьбу вы испытываете? есть ли какие-либо ошибки при его выполнении? попробуйте просто ввести в него доступный фрейм данных..
Ответ №1:
Предполагая, что если у вас много фреймов данных, которые называются следующим образом X1, X2, X3,..X100,..XN
, лучший способ, который я могу придумать, чтобы автоматически объединить их (вместо того, чтобы вводить 1 на 1 фрейм данных в rbind()
параметр, — это создать выражение оценки по строке:
eval_expression = "Xnew <- rbind("
#example if n is 200 (200 dataframes available)
n <- 200
for(a in 1:n){
if(a == n){
eval_expression <- paste0(eval_expression, "X",a,")")
}
else{
eval_expression <- paste0(eval_expression, "X",a,",")
}
}
вы также можете попробовать посмотреть, что находится внутри eval_expression
после выполнения вышеуказанных кодов, а затем, наконец, выполнить окончательное выполнение:
eval(parse(text = eval_expression))