Работать над более чем одним списком
Я не использую так много функций, но когда я делаю это, я склонен использовать функцию anon и некоторую форму apply
, Однако сейчас я пытаюсь написать функцию, которая работает над элементами в списке.
Есть два списка, каждый из которых имеет много элементов (под элементом я имею в виду, например, mylist1[1]
). Все элементы являются датафреймами. Я хочу взять первый кадр данных из mylist1
и первый кадр данных из mylist2
и запустить несколько функций над столбцами в этих информационных фреймах. Затем возьмите 2-й mylist1
пункт и 2-й mylist2
предмет и тд...
Ниже приведено описание того, что я привык писать, но в этом случае явно не работает с двумя списками. Может кто-нибудь помочь мне с быстрым способом выяснить, как я должен подходить к этому, используя что-то, кроме sapply
метод, который, кажется, вызывает основную проблему.
a <- c(1:10)
b <- c(1:10)
z <- c(rep("x", 5), rep("y", 5))
df <- data.frame(cbind(a, b, z))
mylist1 <- split(df, z)
mylist2 <- split(df, z)
myfunction <- function(x, y)
{
a <- as.data.frame(x[1])
b <- as.data.frame(y[1])
meana <- mean(a[1])
meanb <- mean(b[1])
model <- lm(a[1]~b[1])
return(c(model$coefficients[2], meana, meanb))
}
result <- sapply(mylist1, mylist2, myfunction)
Я также думал, что люди думают, что было бы лучше subset
от z
скорее, чем split
и сделать функцию таким образом?
1 ответ
Вы точно описываете вариант использования mapply
,
result <- mapply(myfunction,x=mylist,y=mylist2)
К сожалению, вашему примеру, похоже, не нравится, когда передаются два data.frames (x, первые элементы y - оба data.frames, которые x[1]
а также y[1]
казалось бы противоречит).