1

我有一个像这样的数据框

wood <- read_csv("/Users/name/Desktop/AR/Exercise data-20201109/woodstrength.csv")

我选择 x 和 y

x <- wood %>% select(Conc)
y <- wood %>% select(Strength)

这种关系可以用2次多项式建模,所以我这样做

m <- lm(y ~ poly(x, 2, raw = TRUE))

返回

non-numerical argument for binary operator

但是 x 看起来像这样

> x
# A tibble: 19 x 1
    Conc
   <dbl>
 1   1  
 2   1.5
 3   2  
 4   3  
 5   4  
 6   4.5
 7   5  
 8   5.5
 9   6  
10   6.5
11   7  
12   8  
13   9  
14  10  
15  11  
16  12  
17  13  
18  14  
19  15 

我究竟做错了什么?

4

2 回答 2

1

如果您查看帮助页面 (?poly) poly

poly(x, ..., degree = 1, coefs = NULL, raw = FALSE, simple = FALSE)
[...]
x, newdata: a numeric vector at which to evaluate the polynomial. ‘x’
          can also be a matrix.  Missing values are not allowed in ‘x’.

您的数据集是 tibble,当您选择它时,它会将对象保留为 tibble:

wood = tibble(`Conc` = rnorm(10),'Strength'=rnorm(10))
x <- wood %>% select(Conc)

class(x)
[1] "tbl_df"     "tbl"        "data.frame"

您会收到该错误,因为在函数下方,它应用了需要矩阵或向量的东西,但会看到列表或 data.frame 或在您的情况下为 tibble,因此会出现错误。您可以看到为什么调用该列有效:

 class(wood[["Conc"]])
[1] "numeric"

要将其转换为数字或向量,您可以执行以下操作:

x <- wood %>% pull(Conc)
y <- wood %>% pull(Strength)
m <- lm(y ~ poly(x, 2, raw = TRUE))

或者:

m <- lm(Strength ~ poly(Conc, 2, raw = TRUE),data=wood)
于 2020-11-16T19:33:42.720 回答
0

因此,显然选择 with%>%会检索某种类型的子数据帧,而poly(). 我得到了 x ,x <- wood[['Conc']]现在它不会抛出错误。任何更彻底的解释都非常感谢。

于 2020-11-16T16:22:04.823 回答