Я пытаюсь изменить вывод tapply, чтобы получить вертикальное транспонирование результатов.
Примерно так:
Levels of y Mean of x
A 1.7
B 3.5
C 5.0
вместо:
A B C
1.7 3.5 5.0
Мне удалось создать фрейм данных:
myfunction=function(x,y,FUN,...) {
array1<-tapply(x,y,FUN,...)
a<-data.frame(names(array1),array1)
rownames(a)<-NULL
print(a)
}
attach(InsectSprays)
myfunction(count,spray,mean)
Это работает и дает следующее:
names.array1. array1
1 A 14.500000
2 B 15.333333
3 C 2.083333
4 D 4.916667
5 E 3.500000
6 F 16.666667
Проблема 1)
Теперь я хотел бы измените функцию, чтобы изменить имена столбцов фрейма данных, используя аргументы, которые передаются моей функции при вызове самой функции (в данном случае c case "spray" и "Sum of count").
Я пробовал что-то вроде этого
myfunction=function(x,y,FUN,...) {
array1<-tapply(x,y,FUN,...)
a<-data.frame(names(array1),array1)
rownames(a)<-NULL
colnames(a)<-c(y,print(FUN,"of",x)
print(a)
}
, но мне кажется, R пытается использовать весь вектор y вместо своего имени.
Я не могу понять, какое решение может быть.
Я также безуспешно пробовал использовать args () и formals ().
Проблема 2)
Я хотел бы вызвать myfunction таким образом, передав data = ... применить к исходному вызову (чтобы избежать присоединения и отсоединения набора данных или передачи переменной s в виде df $ variable1). Я пробовал:
myfunction=function(x,y,FUN,...) {
array1<-tapply(x,y,FUN,...)
a<-data.frame(names(array1),array1)
rownames(a)<-NULL
print(a)
}
myfunction<-(count,spray,sum,data=InsectSprays)
, но tapply не находит объект «спрей».
Очевидно, решение всех моих проблем могло заключаться в использовании aggregate (), но я думаю, что решения эти вопросы научат меня многому в написании функций. Большое спасибо за вашу помощь.