Присвоение переменной вставленному имени столбца в R - PullRequest
1 голос
/ 15 января 2020

У меня есть несколько фреймов данных с именами:

Meanplots1, Meanplots2, Meanplots3 et c.

Я пытаюсь написать для l oop, чтобы сделать серию уравнений на каждом кадре данных.

Я пытаюсь использовать функцию paste0.

Я хочу, чтобы x был столбцом каждого набора данных. Таким образом, код должен работать следующим образом:

x <- Meanplots1$PAR

Однако, поскольку я хочу поместить это в a для l oop, я хочу отформатировать его так:

for (i in 1:3){
   x <- paste0("Meanplots",i,"$PAR")
   Dmodel <- nls(y ~ ((a*x)/(b + x )) - c, data = dat, start = list(a=a,b=b,c=c))
}

Для этого он присваивает x списку «Meanplots1 $ PAR», а не фактическому столбцу. Есть идеи, как это исправить?

1 Ответ

2 голосов
/ 15 января 2020

Мы можем получить все data.frame в list с mget

lst1 <- mget(ls(pattern = '^MeanPlots\\d+$'))

, затем l oop над list с lapply и применить модель

DmodelLst <- lapply(lst1, function(dat) nls(y ~ ((a* PAR)/(b + PAR )) - c,
         data = dat, start = list(a=a,b=b,c=c)))

Заменить 'x' на имя столбца 'PAR'.


В операторе l oop создайте NULL list для хранения вывода ('Outlst'), get значение объекта из paste0, затем примените формулу с именем столбца без кавычек, т.е. 'PAR'

Outlst <- vector("list", 3)
ndat <- data.frame(x = seq(0,2000,100))

for(i in 1:3) {
   dat <- get(paste0("MeanPlots", i))
   modeltmp <- nls(y ~ ((a*PAR)/(b + PAR )) - c, 
          data = dat, start = list(a=a,b=b,c=c))
   MD <- data.frame(predict(modeltmp, newdata = ndat))
   MD[,2] <- ndat$x
   names(MD) <- c("Photo","PARi")
   Outlst[[i]] <- MD



  }

Теперь мы извлекаем выходные данные каждого list элемента

Outlst[[1]]
Outlst[[2]]

вместо создания нескольких объектов в глобальной среде

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