Использование соответствия для создания нового столбца для списка информационных фреймов - PullRequest
1 голос
/ 01 мая 2019

У меня есть список фреймов данных, на которых нужно выполнить функцию lapply.Цель состоит в том, чтобы добавить новый столбец symbol к каждому фрейму данных путем сопоставления по именам строк с другим эталонным фреймом данных.Это прекрасно работает в незапросной форме:

df1$symbol <- dds$symbol[ match(rownames(df1), rownames(dds)) ]

, но не удается при нескольких попытках синтаксиса.Похоже, самое близкое к этому:

result_list <- c("df1", "df2", "df3")
lapply(result_list, function(x) {
  x$symbol <- dds$symbol[ match(rownames(x), rownames(dds)) ]
})

[[1]]
character(0)

[[2]]
character(0)

[[3]]
character(0)

Warning messages:
1: In x$symbol <- mcols(dds)$symbol[match(rownames(x), rownames(dds))] :
  Coercing LHS to a list
2: In x$symbol <- mcols(dds)$symbol[match(rownames(x), rownames(dds))] :
  Coercing LHS to a list
3: In x$symbol <- mcols(dds)$symbol[match(rownames(x), rownames(dds))] :
  Coercing LHS to a list

Или поочередно:

lapply(result_list, function(x) {
  x[["symbol"]] <- dds$symbol[ match(rownames(x), rownames(dds)) ]
})
Error in x[["symbol"]] <- dds$symbol[ match(rownames(x), rownames(dds)) ] :
  replacement has length zero

lapply(result_list, function(x) {
  x[["symbol"]] <- dds[["symbol"]][ match(rownames(x), rownames(dds)) ]
})
Error in x[["symbol"]] <- dds[["symbol"]][ match(rownames(x), rownames(dds)) ] :
  replacement has length zero

1 Ответ

1 голос
/ 01 мая 2019

Нам нужно получить значения «строки» в списке.mget возвращает 'data.frame's' на основе идентификаторов в виде строк

lst1 <- mget(result_list)

, а затем перебирает lst1

lapply(lst1, function(x) {
   x$symbol <- dds$symbol[ match(rownames(x), rownames(dds)) ]
   x
   })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...