Эй, поэтому я недавно задал вопрос, который я сформулировал довольно плохо, поэтому я хотел снова спросить с лучшим примером. Скажем, у меня есть список dataframes как так:Использование dataframe в списке dataframes как аргумент функции в R и вызов его по его имени
first<- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"),
levels = c("Low", "Med", "Hi"), ordered = TRUE),
x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),
z = c(1, 1, 1, 2))
second<- data.frame(b = factor(c("Med", "Med", "Low", "Low"),
levels = c("Low", "Med", "Hi"), ordered = TRUE),
x = c("c", "B", "C", "D"), y = c(3, 2, 6, 5),
z = c(1, 11, 4, 3))
c<- list(first,second)
Я тогда пошел бы на имя кадры данных в списке:
names(c)<- c("first","second")
Теперь давайте говорить, что я хотел бы сделать функцию, чтобы взять среднее значение столбца в подмножестве кадра данных «второе». Мой единственный аргумент был бы какой столбец я хотел взять среднее:
test<- function(arg1){
poop<- subset(c$second, c$second$b=="Med")
pee<- mean(poop[,arg1])
return(pee)
}
Если я протестировать эту функцию из него работает отлично:
test("y")
[1] 2.5
Теперь проблема у меня в том, что я хочу чтобы сделать фрейм данных в списке кадров данных аргументом в функции. Это изменило бы это:
test<- function(arg0, arg1){
poop<- subset(c$arg0, c$arg0$b=="Med")
pee<- mean(poop[,arg1])
return(pee)
}
И если я запускаю тот же код:
test("second","y")
[1] NA
Warning message:
In mean.default(poop[, arg1]) :
argument is not numeric or logical: returning NA
Когда я хотел бы получить 2,5 раз. Я хотел бы вызвать фрейм данных по его имени в списке, а не по любому назначенному номеру элемента. Благодаря!
Не рекомендуется использовать '' $ внутри функции. Используйте '[' – akrun