作者HumuHumu (呼姆呼姆)
看板R_Language
标题Re: [问题] 如何将function放入回圈? (求救)
时间Sat Oct 6 12:37:19 2018
※ 引述《ronald736 (明天会更好)》之铭言:
: 我想将资料每笔按照规则分群,资料如下图:
: https://imgur.com/a/wXNRKJ6
: 图中想把"平均成绩"依照P50、P70这2个栏位分成3类
: 平均成绩 < P50 为第3类
: 平均成绩 >= P50 且 <P75 为第2类
: 平均成绩 >=P75 为第1类
: 我打算将function放入回圈 (因为是要每1笔都依照栏位分群)
: 程式码如下,能否帮我看看是写法上错误吗? 还是那边的观念不对?
: classp <- NULL
: for (i in 1:dim(pdata)[1]) {
: cf <- function(pdata$平均成绩[i])
: {
: if (pdata$平均成绩[i]<pdata$P50[i]) {
: classp[i] = 3
: } else if (pdata$平均成绩[i]>=pdata$P50[i] & pdata$平均成绩
: [i]<pdata$P75[i]) {
: classp[i] = 2
: } else {
: classp[i] = 1
: }
: return(classp[i])
: }
: classp[i] <- cf(pdata$平均成绩[i])
: }
: classp
: 程式码与错误图:
: 程式码 : https://imgur.com/a/Sw9Mrmb
: 错误 : https://imgur.com/a/3DeYkYJ
function放在回圈里其实会很吃效能,因为每一圈都要重新建一次function
而且你function的用法尽量不要用到Global的变数,只要让他回传你要的类别就好
你的function的目的应该是,丢进去平均分数、P50和P70,它就会告诉我这个学生
是第几类,然後你再用回圈把这个function告诉你的类别丢到你的classp里面
cf <- function(score,P50,P75){
if (score<P50) {
return(3)
} else if (score>=P50 & score<P75) {
return(2)
} else {
return(1)
}
}
classp <- NULL
for (i in 1:dim(pdata)[1]) {
classp[i] <- cf(score=pdata$平均成绩[i],P50 = pdata$P50[i],P75 =
pdata$P75[i])
}
classp
https://pastebin.com/J1wkCviS
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.32.200.137
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1538800642.A.C27.html
※ 编辑: HumuHumu (114.32.200.137), 10/06/2018 12:47:42
1F:推 ronald736: 太感谢H大大,我又学到正确的观念,function的写法 10/06 17:10
2F:→ ronald736: 原来要分开,function中不可带有回圈变数 10/06 17:11