Именование переменных и присвоение значений внутри цикла в R - PullRequest
0 голосов
/ 10 декабря 2018

У меня 90 переменных:

x111 <- 23
x112 <- 54
...
x1130 <- 69

x2111 <- 149
x2112 <- 12
...
x2130 <- 45

x3111 <- 85
x3112 <- 105
...
x3130 <- 501

Мне нужно вычислить сумму квадратов каждой переменной (SS), например, x111 ^ 2 + x112 ^ 2 + ... +x3130 ^ 2

У меня есть функция:

SSobs_calculator <- function(obs) {
obs_value <- (obs)^2
total_obs_value = total_obs_value + obs_value
return(obs_value)
}

Проблема в том, что я не знаю, как передавать переменные.В следующем коде:

for(i in 1:90){
   SSobs_calculator(paste0("x1_11",i)
 }

не будет работать, потому что я не могу передать переменные, которые начинаются с x1_2 .. и x1_3 ... Также индекс для каждой группы равен 30, а 90 не будетбыть действительным.

Должен ли я объединить все переменные во фрейм данных, а затем возвести их в квадрат?Есть ли другое решение?

1 Ответ

0 голосов
/ 10 декабря 2018

Мы можем получить значения объектов в list с помощью mget, затем взять мощность и Reduce в одно число, взяв sum (+) из list элементов

Reduce(`+`, lapply(mget(ls(pattern = '^x\\d+$')), `^`, 2))

Или после получения элементов в list, unlist, а затем выполнить ^ за один шаг

sum(unlist(mget(ls(pattern = '^x\\d+$')))^2)

data

x111 <- 23
x112 <- 54
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...