У меня есть полдюжины матриц: m1, m2, m3, m4, m5 и m6. Ради простого примера, скажем, они выглядят следующим образом:Применение «get» ко всем элементам в векторе -или- Работа с последовательными переменными в r
m1<- matrix(1:10, 2, 5)
m2<- matrix(11:20, 2, 5)
m3<- matrix(21:30, 2, 5)
m4<- matrix(31:40, 2, 5)
m5<- matrix(41:50, 2, 5)
m6<- matrix(51:60, 2, 5)
В конце концов, я хочу, чтобы применить функцию для всех 6:
f(m1,m2,m3,m4,m5,m6)
Поскольку количество матриц будет меняться каждый раз, когда Я запускаю скрипт, я ищу способ сделать это программно. Мой первый через должны были взять функцию:
paste("m",1:6,sep="")
Выражение Возвращена строка:
[1] "m1" "m2" "m3" "m4" "m5" "m6"
Чтобы найти значение, а не имена матриц, я попытался добавить «получить» в смесь, взяв функцию:
get(paste("m",1:6,sep=""))
Но «получить» выражение только возвращаемые значения для m1 и игнорировали все остальное, что я хотел. Итак, я начал возиться с петлями для:
for(k in 1:6){
if(k == 1){b<- paste("m",k,sep="")}
else{b<- c(b, paste("m",k,sep=""))}
}
> b
[1] "m1" "m2" "m3" "m4" "m5" "m6"
Это та же строка, что я получил от моей первой попытки. Следовательно, следующее выражение не удалось:
w<- f(b)
Я также попытался:
w<- f(get(b))
Несколько предсказуемо, R признал m1 в качестве матрицы, но игнорировали остальных членов в Б.
I также пытался:
w<- f(get(b[1:6]))
Когда я это сделал, я получаю тот же результат, что и выше.
Наконец, я также попытался поворота б в списке:
b<- list(m1,m2,m3,m4,m5,m6)
Я надеялся использовать lapply (б, г), а функция (которую я не писал, и я обязан использовать) не работает должным образом при помещении в лапы.
Любые другие мысли о том, как я могу выполнить эту, казалось бы, простую задачу? Я до сих пор относительно новичок в R, поэтому вполне может быть хорошо известный подход, о котором я не знаю, но я ничего не мог найти в поиске существующей документации, и я чувствую себя глупо, нуждаясь в помощи, чтобы разобраться в чем-то это маленький. Приветствует форум за его помощь.
Попробуйте 'sapply (ls (pattern =" m "), get)'. –
Трудно быть слишком конкретным, но я согласен с одним из ответов ниже: настоящая проблема заключается в том, что вы делаете что-то вроде не-R-подобного. Лучшее решение, вероятно, состоит в том, чтобы изменить вашу функцию 'f' так, чтобы он принимал единственный список матриц, а не длинный список аргументов. – joran