Как назначить значение объекта вместо имени объекта - PullRequest
0 голосов
/ 20 марта 2020

У меня есть следующее l oop в R:

for (i in 1:length(M_names)) {
  for (j in 1:length(temp)) {

    q <- paste("M", j, "[", i, ",]", sep="")
    assign(M_names[[i]], q) 

  }
}

Я хочу создать объекты с именами, хранящимися в M_names и назначить им length(temp) значения, например, M1[1,]

Моя проблема теперь заключается в следующем: l oop создает нужные мне объекты с правильными именами, но assign() вместо этого вместо значений, например, M1[1,], но этой строки символов. Так как мне изменить эту строку символов на значения, стоящие за ней?

Следующее, что я хочу сделать, это не перезаписывать значения каждым jl oop, а добавлять их вместе, но мне удастся это сделать. позже.

Возможно, есть гораздо более простой способ без использования циклов, но я немного новичок в R, и циклы кажутся мне знакомыми.

Заранее спасибо и с наилучшими пожеланиями, Маркус

1 Ответ

1 голос
/ 20 марта 2020

Кажется, что вы ищете функцию eval() вместо функции assign(). Функция eval() вместе с функцией parse() может выполнять текст и возвращать вывод. Давайте рассмотрим простой пример:

x <- eval(parse(text = "1 + 1"))
print(x)

Значение x выводится как 2. Я попытался поработать с вашим кодом, чтобы создать воспроизводимый пример:

M_names <- list(
  "M_name_1" = seq(1, 10),
  "M_name_2" = seq(1, 20),
  "M_name_3" = seq(1, 30)
)

temp <- list(
  "temp_name_1" = seq(10, 20),
  "temp_name_2" = seq(20, 30)
)

M1 <- data.frame(
  x = paste('m1', seq(1,3), sep = "_")
)

M2 <- data.frame(
  x = paste('m2', seq(1,3), sep = "_")
)
for (i in 1:length(M_names)) {
  M_names[[i]] <- vector("list", length(temp))
  for (j in 1:length(temp)) {
    q <- paste("M", j, "[", i, ",]", sep="")
    q_result <- eval(parse(text=q))
    print(q)
    print(q_result)
    M_names[[i]][[j]]<- eval(q_result)
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...