R - 使用 rbind 创建数据帧不起作用



我正在尝试编写一个脚本来获取方程 25a+20b=1600 的一些特定值,其中 a 在 24:60 和 b 之间 20:50

我需要让 a 和 b 对满足方程。

我的第一个问题是如何用一位小数(a=24.0,24.1,24.2...等)定义a和b,但我克服了定义a<-c(240:600)/10,所以我的第一个问题是:有没有直接的方法可以做到这一点?

现在,我

做了几个嵌套循环,每次方程在向量中得到满足时,我都能得到,我想使用 rbind() 将此向量附加到矩阵或数据帧,但它在没有任何错误或警告的情况下不起作用。 它只需要第一个向量的值,就是这样!

这是我的代码,有人可以帮我定义问题所在吗?

solve_ms <- function() {  
  index<-1  
  sol<-data.frame()  
  temp<-vector("numeric")  
  a<-c(240:600)/10  
  b<-c(200:500)/10  
 for (i in 1:length(a)){   
    for (j in 1:length(b)) {   
      c <- 25*a[i]+20*b[j]  
      if(c == 1600) {  
        temp<-c(a[i], b[j]) 
        if(index == 1) {  
          sol<-temp 
          index<-0  
        }  
        else   rbind(sol,temp)  
      }  
     }  
   }  
 return(sol)  
}

我发现了我的代码问题所在,它正在使用 rbind 而不将其返回分配给数据帧。我必须做{sol<-rbind(sol,temp)},它会起作用。我也会检查其他建议..谢谢。

试试这个:

#define a function
fun <- function(a,b) (25*a+20*b) == 1600

由于浮点精度可能是一个问题:

#alternative function
fun <- function(a,b,tol=.Machine$double.eps ^ 0.5) abs(25*a+20*b-1600) < tol
#create all possible combinations
paras <- expand.grid(a=c(240:600)/10, b=20:50)
paras[fun(paras$a,paras$b),]
         a  b
241   48.0 20
594   47.2 21
947   46.4 22
1300  45.6 23
1653  44.8 24
2006  44.0 25
2359  43.2 26
2712  42.4 27
3065  41.6 28
3418  40.8 29
3771  40.0 30
4124  39.2 31
4477  38.4 32
4830  37.6 33
5183  36.8 34
5536  36.0 35
5889  35.2 36
6242  34.4 37
6595  33.6 38
6948  32.8 39
7301  32.0 40
7654  31.2 41
8007  30.4 42
8360  29.6 43
8713  28.8 44
9066  28.0 45
9419  27.2 46
9772  26.4 47
10125 25.6 48
10478 24.8 49
10831 24.0 50

如果问题真的这么简单,即求解 2 个变量线性方程的根,您可以随时重新排列方程以将 b 写成 a,即 b = (1600-25*a)/20并获取b的所有值对应的a值,并通过b过滤组合

例如

a = c(240:600)/10
b = 20:50
RESULTS <- data.frame(a, b = (1600 - 25 * a)/20)[((1600 - 25 * a)/20) %in% b, ]
RESULTS
##        a  b
## 1   24.0 50
## 9   24.8 49
## 17  25.6 48
## 25  26.4 47
## 33  27.2 46
## 41  28.0 45
## 49  28.8 44
## 57  29.6 43
## 65  30.4 42
## 73  31.2 41
## 81  32.0 40
## 97  33.6 38
## 105 34.4 37
## 121 36.0 35
## 137 37.6 33
## 145 38.4 32
## 161 40.0 30
## 177 41.6 28
## 185 42.4 27
## 193 43.2 26
## 201 44.0 25
## 209 44.8 24
## 217 45.6 23
## 225 46.4 22
## 233 47.2 21
## 241 48.0 20

最新更新