Прежде всего, спасибо, кто когда-либо задает этот вопрос. У меня есть до десяти кадров данных, которые я хочу применить к функции pct (из пакета caroline). Из-за данных, которые у меня есть, что вызывает ошибку переполнения, я должен разделить все ячейки на 1000. Как только это произойдет, я могу применить функцию pct без проблем. Затем я хочу обрезать исходные данные и создать новый фрейм данных.Примените функцию pct к нескольким информационным кадрам
Мне удалось написать следующую функцию, которая делает правильную вещь, за исключением того, что она не сохраняет результаты (возможно, она не имеет оператора возврата). Поэтому я мог бы сделать это долго. Однако это не самое главное.
require (pct)
finallist <- list(A, B)
lapply(finallist , function (foo) {
temp <- as.data.frame(foo[,1])
checks <- cbind(temp, foo[,2:480]/1000)
checka <- pct(checks, tickerlist)
foo <- checka[c(1, 481:959)]
})
С А и В данных кадров формируется как этот
A <- structure(list(mgrname = c("Man A", "Man A", "Man A", "Man B", "Man B", "Man B", "Man C", "Man C", "Man C"),
ticker = c("AAPL", "MSFT", "TLSA", "AAPL", "MSFT", "TLSA", "AAPL", "MSFT", "TLSA"),
share = c(20L, 30L, 40L, 20L, 10L, 50L, 20L, 20L, 80L)),
.Names = c("mgrname", "ticker", "share"),
row.names = c(NA, -9L),
class = "data.frame")
B будет же
Реальный ключ, чтобы попытаться записать новые данные кадры из. Код, который я начал с использует невидимую функцию (я думаю, что она должна иметь присвойте функцию где-то там)
invisible(lapply (names(finalist),
function (foo) assign (x = y, value = temp <- as.data.frame(foo[,1]),
checks <- cbind(temp, foo[,2:480]/1000),
checka <- pct(checks, tickerlist),
foo <- checka[c(1, 481:959)] , envir =.GlobalEnv)))
Но это говорит
Error in lapply(names(finalist), function(foo) assign(x = y, value = temp <- as.data.frame(foo[, :
object 'finalist' not found
Окончательный кадр данных следует надеяться выглядеть
| mgrname | APPL | MSFT | TLSA |
|---------|--------|-------|-------|
| Man A | .33 | .5 | .23 |
| Man B | .33 | .16 | .30 |
| Man C | .33 | .33 | .47 |
Похоже, вы определяете объект 'finallist' с двумя' l 's, но затем в вашем' lapply' вы используете 'финалист' только с одним' l'. Поскольку вы никогда не определяли 'финалист' с одним' l', вы получаете объект, который не найден. – Gregor
У вас есть хорошая идея со списком кадров данных, я не знаю, почему вы обманываете себя с помощью 'assign' внутри вашего' lapply' - продолжайте использовать списки. Аргумент 'x = y' для' assign' особенно странный, поскольку 'y', похоже, не меняется. Кроме того, вам не хватает фигурных скобок? Кажется, вы даете 'assign' очень много аргументов,' x = y', 'value = temp <- ...', 'checks <- ...'. Обычно считается неправильной формой (и ненужной) для использования '<-' в аргументе функции ... – Gregor
Когда вы выполняете' function (foo) ',' foo' - это имя ввода функции, вы, кажется, используя его как выход. Я думаю, что ваш пример несколько затенен, используя идентичные входы 'A' и' B'. Если ваши кадры данных имеют одинаковую структуру, вам, вероятно, лучше будет объединить их в один фрейм данных и использовать 'dplyr' или' data.table' для работы с ним по группам. – Gregor