Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何计算h点_R_Function_If Statement_Text Mining_Quanteda - Fatal编程技术网

R 如何计算h点

R 如何计算h点,r,function,if-statement,text-mining,quanteda,R,Function,If Statement,Text Mining,Quanteda,我试图写一个函数来计算h点。该函数在秩频率数据帧上定义。 考虑下面的数据帧: 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_point <- function(data){ x <- seq(nrow(data)) f_x <- data[["frequency"]][x

我试图写一个函数来计算h点。该函数在秩频率数据帧上定义。 考虑下面的数据帧:

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_point <- function(data){
  x <- seq(nrow(data))
  f_x <- data[["frequency"]][x]
  h <- which(x == f_x)
  if(length(h)>1) h
  else{
    i <- which(x<f_x)
    j <- which(x>f_x)
    s <- which(outer(i,j,"-") == -1, TRUE)
    i <- i[s[,1]]
    j <- j[s[,2]]
    cat("i: ",i, "j: ", j,"\n")
    f_x[i]*j - f_x[j]*i / (i-j + f_x[i]-f_x[j])
  }
}

h_point(DATA) 
i:  11 j:  12 
[1] 34
h_point您可以:

h_point <- function(data){
  x <- seq(nrow(data))
  f_x <- data[["frequency"]][x]
  h <- which(x == f_x)
  if(length(h)>1) h
  else{
    i <- which(x<f_x)
    j <- which(x>f_x)
    s <- which(outer(i,j,"-") == -1, TRUE)
    i <- i[s[,1]]
    j <- j[s[,2]]
    cat("i: ",i, "j: ", j,"\n")
    f_x[i]*j - f_x[j]*i / (i-j + f_x[i]-f_x[j])
  }
}

h_point(DATA) 
i:  11 j:  12 
[1] 34

h_point我想我已经明白了你想要实现的目标。如果给定行的
rank==frequency
,我的循环将遍历数据并在任意点中断。如果使用
数据$rank[i]==fr(i)
显式测试,而不是依赖于i,以防绑定列组等,则可能更为谨慎

如果第i行的秩低于freq,而第j行的秩高于freq,则第二条if语句计算第i行和第j行的h点(
s

这是你想要的吗

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)))
fr <-function(x){d <-DATA$frequency[x]
return(d)}

for(i in 1:nrow(DATA)){
  j <- i+1
  if (i==fr(i)){
    s <- list(ij=c(i=i,j=j), h=i)
    break
  }else if(i <fr(i) && j>fr(j)){
    s <-list(ij=c(i=i,j=j),h=fr(i)*j-fr(j)*i/j-i+fr(i)-fr(j))
}}

数据我想我已经明白了你想要实现的目标。如果给定行的
rank==frequency
,我的循环将遍历数据并在任意点中断。如果使用
数据$rank[i]==fr(i)
显式测试,而不是依赖于i,以防绑定列组等,则可能更为谨慎

如果第i行的秩低于freq,而第j行的秩高于freq,则第二条if语句计算第i行和第j行的h点(
s

这是你想要的吗

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)))
fr <-function(x){d <-DATA$frequency[x]
return(d)}

for(i in 1:nrow(DATA)){
  j <- i+1
  if (i==fr(i)){
    s <- list(ij=c(i=i,j=j), h=i)
    break
  }else if(i <fr(i) && j>fr(j)){
    s <-list(ij=c(i=i,j=j),h=fr(i)*j-fr(j)*i/j-i+fr(i)-fr(j))
}}

DATA@akrun刚刚编辑了这个问题。添加了一个小的data.frame。希望它能有所不同。要修复for循环,您需要添加第二条if语句(
else
没有条件选项)并结束循环。您提供的数据的预期输出是什么?@George感谢您的评论:)。因此,我添加了所需的内容。如果你的第一句话不可能的话,希望它现在有更好的意义。i被设置为运行1:15或数据长度$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,这些都不是真的。除了@Tanner33语句之外,在最后一个循环i==nrow(数据)上,j将是i+1。@akrun刚刚编辑了这个问题。添加了一个小的data.frame。希望它能有所不同。要修复for循环,您需要添加第二条if语句(
else
没有条件选项)并结束循环。您提供的数据的预期输出是什么?@George感谢您的评论:)。因此,我添加了所需的内容。如果你的第一句话不可能的话,希望它现在有更好的意义。i被设置为运行1:15或数据长度$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,这些都不是真的。除了@Tanner33语句之外,您将在最后一个循环i==nrow(数据)和j将是i+1。非常感谢!只需要小的修改。长度(h)>1永远不会为真,因为它是排名频率数据,所以长度(h)==1是合乎逻辑的。最后一行需要一对括号:(f_x[i]*j-f_x[j]*i)/(j-i+f_x[i]-f_x[j])。此外,分母是(j-i+f_x(i)-f_x(j)),而不是(i-j+f_x[i]-f_x[j])。对不起,应该声明
length(h)>=1
。这是一个广义代码,反映了您所拥有的。即使将
f
用作函数而不是频率。请注意,所有内容都已矢量化。非常感谢!只需要小的修改。长度(h)>1永远不会为真,因为它是排名频率数据,所以长度(h)==1是合乎逻辑的。最后一行需要一对括号:(f_x[i]*j-f_x[j]*i)/(j-i+f_x[i]-f_x[j])。此外,分母是(j-i+f_x(i)-f_x(j)),而不是(i-j+f_x[i]-f_x[j])。对不起,应该声明
length(h)>=1
。这是一个广义代码,反映了您所拥有的。即使将
f
用作函数而不是频率。请注意,所有内容都是矢量化的。