【发布时间】:2020-12-07 04:30:26
【问题描述】:
我正在尝试编写一个函数来计算 h 点。该函数是在秩频率数据帧上定义的。 考虑以下 data.frame :
DATA <-data.frame(frequency=c(49,48,46,38,29,24,23,22,15,12,12,10,10,9,9), rank=c(seq(1, 15)))
h点的公式是:
如果{有一个 r = f(r), h-point = r }
else { h 点 = f(i)j-f(j)i / j-i+f(i)-f(j) }
其中 f(i) 和 f(j) 是第 i 个和第 j 个等级的对应频率,i 和 j是 i
现在,我尝试了以下代码:
fr <-function(x){d <-DATA$frequency[x]
return(d)}
for (i in 1:length(DATA$rank)) {
j <- i+1
if (i==fr(i))
return(i)
else(i<fr(i) && j>fr(j)) {
s <-fr(i)*j-fr(j)*i/j-i+fr(i)-fr(j)
return(s)
}}
我也试过了:
for (i in 1:length(DATA$rank)) {
j <- i+1
if (i==fr(i))
return(i)
if (i<fr(i) while(j>fr(j))) {
s <-fr(i)*j-fr(j)*i/j-i+fr(i)-fr(j)
return(s)
}}
它们都不起作用。对于 DATA ,所需的结果将是 i=11 和 j=12,因此: h点=12×12 - 10×11 / 12 - 11 + 12 - 10
你能告诉我我做错了什么吗?
【问题讨论】:
-
@akrun 刚刚编辑了问题。添加了一个小的data.frame。希望它有所作为。
-
要修复您的 for 循环,您需要添加第二个 if 语句(
else没有条件选项)并关闭循环。您提供的 DATA 的预期输出是什么? -
@George 感谢您的评论:)。结果,我添加了所需的内容。希望现在更有意义
-
您的第一个 if 语句是不可能的。 i 设置为运行 1:15 或 Data$rank 的长度,并且您的函数正在读取数据框第 x 行中的频率,介于 9 到 49 之间。您的 if 语句正在检查 1==49, 2==48, 3==46, 4==38, 5==29, 6==24, 7==23, 8==22, 9==15, 10==12, 11==12, 12==10, 13==10, 14==9, 或 15==9 没有一个是 TRUE
-
除了@Tanner33 语句之外,您将在最后一个循环中使用 j 索引超出范围 i == nrow(DATA) 并且 j 将是 i+1。
标签: r function if-statement text-mining quanteda