R error: "Error in check.data : Argument Should be Numeric"
R error: "Error in check.data : Argument Should be Numeric"
我正在学习 R 编程语言的“kohonen”库。我创建了一些人工数据来尝试一些功能。我尝试仅对连续(即 type = as.numeric)数据使用“supersom()”函数,一切正常。但是,当我尝试 运行 连续和分类(类型 = as.factor)上的“supersom()”函数时,我开始 运行 出现一些错误(“参数数据应该是数字").
“supersom()”函数有一个名为“dist.fct”(距离函数)的参数,它允许用户指定哪种类型的“距离”(例如,“Euclidean”表示连续,“tanimoto”对于分类)应该用于不同的列。我创建了一个包含 4 个连续变量和 3 个分类变量的数据集。使用以下 link : https://www.rdocumentation.org/packages/kohonen/versions/2.0.5/topics/supersom ,我尝试 运行 示例:
#load libraries
library(kohonen)
library(dplyr)
#create and format data
a =rnorm(1000,10,10)
b = rnorm(1000,10,5)
c = rnorm(1000,5,5)
d = rnorm(1000,5,10)
e <- sample( LETTERS[1:4], 100 , replace=TRUE, prob=c(0.25, 0.25, 0.25, 0.25) )
f <- sample( LETTERS[1:5], 100 , replace=TRUE, prob=c(0.2, 0.2, 0.2, 0.2, 0.2) )
g <- sample( LETTERS[1:2], 100 , replace=TRUE, prob=c(0.5, 0.5) )
data = data.frame(a,b,c,d,e,f,g)
data$e = as.factor(data$e)
data$f = as.factor(data$f)
data$g = as.factor(data$g)
cols <- 1:4
data[cols] <- scale(data[cols])
data = as.matrix(data)
#som function
som <- supersom(data= data, grid =somgird(10,10, "hexagonal"),
dist.fct = c("euclidean","euclidean","euclidean","euclidean","tanimoto", "tanimoto", "tanimoto", "tanimoto), keep.data = TRUE)
#sources:
https://cran.r-project.org/web/packages/kohonen/kohonen.pdf
https://www.rdocumentation.org/packages/kohonen/versions/2.0.5/topics/supersom
但是,这会产生错误 "Error in check.data(data): Argument data should be numeric"
。根据文档(参见我附加的来源),“dist.fct”参数有默认值 - 因此,我也尝试将其留空,希望自动选择默认值:
som <- supersom(data= data, grid =somgird(10,10, "hexagonal"), keep.data = TRUE)
但这也产生了类似的错误。
有谁知道我做错了什么吗?
谢谢
如果您将因子或字符数据保存在矩阵中,它会将矩阵的所有其他值转换为字符,因为矩阵只能包含一种类型的数据。只保留矩阵中的数字数据或将每列转换为列表。
library(kohonen)
cols <- 1:4
data[cols] <- scale(data[cols])
som <- supersom(data= as.list(data), grid = somgrid(10,10, "hexagonal"),
dist.fct = "euclidean", keep.data = TRUE)
我正在学习 R 编程语言的“kohonen”库。我创建了一些人工数据来尝试一些功能。我尝试仅对连续(即 type = as.numeric)数据使用“supersom()”函数,一切正常。但是,当我尝试 运行 连续和分类(类型 = as.factor)上的“supersom()”函数时,我开始 运行 出现一些错误(“参数数据应该是数字").
“supersom()”函数有一个名为“dist.fct”(距离函数)的参数,它允许用户指定哪种类型的“距离”(例如,“Euclidean”表示连续,“tanimoto”对于分类)应该用于不同的列。我创建了一个包含 4 个连续变量和 3 个分类变量的数据集。使用以下 link : https://www.rdocumentation.org/packages/kohonen/versions/2.0.5/topics/supersom ,我尝试 运行 示例:
#load libraries
library(kohonen)
library(dplyr)
#create and format data
a =rnorm(1000,10,10)
b = rnorm(1000,10,5)
c = rnorm(1000,5,5)
d = rnorm(1000,5,10)
e <- sample( LETTERS[1:4], 100 , replace=TRUE, prob=c(0.25, 0.25, 0.25, 0.25) )
f <- sample( LETTERS[1:5], 100 , replace=TRUE, prob=c(0.2, 0.2, 0.2, 0.2, 0.2) )
g <- sample( LETTERS[1:2], 100 , replace=TRUE, prob=c(0.5, 0.5) )
data = data.frame(a,b,c,d,e,f,g)
data$e = as.factor(data$e)
data$f = as.factor(data$f)
data$g = as.factor(data$g)
cols <- 1:4
data[cols] <- scale(data[cols])
data = as.matrix(data)
#som function
som <- supersom(data= data, grid =somgird(10,10, "hexagonal"),
dist.fct = c("euclidean","euclidean","euclidean","euclidean","tanimoto", "tanimoto", "tanimoto", "tanimoto), keep.data = TRUE)
#sources:
https://cran.r-project.org/web/packages/kohonen/kohonen.pdf
https://www.rdocumentation.org/packages/kohonen/versions/2.0.5/topics/supersom
但是,这会产生错误 "Error in check.data(data): Argument data should be numeric"
。根据文档(参见我附加的来源),“dist.fct”参数有默认值 - 因此,我也尝试将其留空,希望自动选择默认值:
som <- supersom(data= data, grid =somgird(10,10, "hexagonal"), keep.data = TRUE)
但这也产生了类似的错误。
有谁知道我做错了什么吗?
谢谢
如果您将因子或字符数据保存在矩阵中,它会将矩阵的所有其他值转换为字符,因为矩阵只能包含一种类型的数据。只保留矩阵中的数字数据或将每列转换为列表。
library(kohonen)
cols <- 1:4
data[cols] <- scale(data[cols])
som <- supersom(data= as.list(data), grid = somgrid(10,10, "hexagonal"),
dist.fct = "euclidean", keep.data = TRUE)