Как применить каждую переменную серии для вычисления цикла в R - PullRequest
1 голос
/ 09 октября 2019

У меня есть 10 переменных X1, X2, .. X10

> X1

[1] 11.388245  3.847984  3.271024  3.637894

> X2

[1]  3.603660  3.176091 20.868740  4.229564  3.150181  3.379059 11.379710  3.577636  5.094401

> X10

 [1] 11.613462  7.360181  3.210812  5.066974  5.391218  3.049254 10.639178  4.154140 

 [9]  3.502896  7.919751  3.416924  6.577095  5.047722  3.953996  3.153649  3.005215

ms<-list()

for (i in c(X1,X2,X3,X4,X5,X6,X7,X8,X9,X10)){

  n<-length(i)

  m<-n/sum(log(i/3))

  ls<-c(ms,m)
}

вышеуказанный код R не работает. я хочу получить конечный результат с помощью числовой переменной ms, которая содержит 10 значений из расчета n/sum(log(i/3).

Например, одно из значений:

> n<-length(X1)

> m<-n/sum(log(X1/3))
> 
> m
[1] 2.148009

после применения X1, X2, .. X10 в цикле для получения:

 Ms <-(m1 m2 m3 ...m10)

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Функция c объединяет ваши векторы в 1 длинный вектор, например, c (1: 3, 5: 7) будет 1 вектором с 6 элементами.

Я думаю, что вы хотите использоватьlist вместо c, который сохранит векторы как отдельные векторы.

Ваш взгляд должен работать, если вы сделаете что-то вроде:

ms<-list()

for (i in list(X1,X2,X3,X4,X5,X6,X7,X8,X9,X10)){

  n<-length(i)

  m<-n/sum(log(i/3))

  ms<-c(ms,m)
}

Обратите внимание на исправление в последней строке.

Но поскольку целью является создание нового списка с результатами, использование функции lapply может быть проще:

ms <- lapply( list(X1,X2,X3,X4,X5,X6,X7,X8,X9,X10), 
  function(x) length(x)/sum(log(x/3)) 
)
0 голосов
/ 09 октября 2019

Здесь MWE

ms <- c()
#to define ms in more efficient way use 
#ms <- vector("double", 10)
for(i in seq_len(10)){
           #use get to retrive an object from the global Environment 
           n<-length(get(paste0('X',i)))
           m<-n/sum(log(get(paste0('X',i))/3))
           ms[i]=m
           }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...