在R中封装不同类型对象的正确对象类型是什么?数据框似乎不是正确的对象类型?数据帧具有多个条目,每个条目具有相同的子字段。
我需要的是一个单个对象,具有不同的子对象,其中一些可能是数组。
示例:
score<-0.95
confidence_in_score<-0.5
confidence_interval<-c(0,1)
token<-"foobar"
object_to_return<-data.frame(score,confidence_in_score,confidence_interval,token)
score confidence_in_score confidence_interval token
1 0.05 0.5 0 ggg
2 0.05 0.5 1 ggg
我真正想要的是一个容器,其中一个元素将是一个只有两个元素的数组confidence_interval。
动机:将一个对象而不是几个单独的子对象传递给调用程序。
答案 0 :(得分:7)
试试这个:
# next 4 lines are from question
score<-0.95
confidence_in_score<-0.5
confidence_interval<-c(0,1)
token<-"foobar"
list(score = score,
confidence_in_score = confidence_in_score,
confidence_interval = confidence_interval,
token = token)
作为从R本身返回列表的示例,请查看eigen
的源代码的最后一行。它返回一个包含两个名为values
和vectors
的组件的列表。 (只需在R中单独在一行上键入eigen
即可查看其来源。)
在R中尝试?list
以获取更多信息和示例。
这些链接也可能有所帮助:
https://cran.r-project.org/doc/manuals/r-release/R-intro.html#Lists-and-data-frames
http://www.homogenisation.org/admin/docs/Lists&DataFrames.pdf
答案 1 :(得分:4)
您要查找的对象是list
。列表的子元素可以包含任何类型的R对象。例如:
str(list(mtcars, summary(mtcars), c('bla', 'spam', 'ham'), array(runif(1000))))
List of 4
$ :'data.frame': 32 obs. of 11 variables:
..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
..$ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
..$ disp: num [1:32] 160 160 108 258 360 ...
..$ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ...
..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
..$ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
..$ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
..$ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ...
..$ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...
$ : 'table' chr [1:6, 1:11] "Min. :10.40 " "1st Qu.:15.43 " "Median :19.20 " "Mean :20.09 " ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:6] "" "" "" "" ...
.. ..$ : chr [1:11] " mpg" " cyl" " disp" " hp" ...
$ : chr [1:3] "bla" "spam" "ham"
$ : num [1:1000(1d)] 0.5061 0.0806 0.4081 0.5038 0.8896 ...
我写的following tutorial可能对你有利。
答案 2 :(得分:-4)
我不推荐列表。每组数据都可以在关系数据库中表示,这样更容易使用。在您的情况下,您有两种选择:
data = data.frame(score = 0.95,
confidence_in_score = 0.5,
confidence_interval_lower_limit = 0,
confidence_interval_upper_limit = 1,
token = "foobar")
或者
interval = data.frame(score = 0.95,
confidence_in_score = 0.5,
token = "foobar")
limit = data.frame(token = c("foobar", "foobar"),
type = c("lower_limit", "upper_limit"),
value= c(0, 1) )
您可以使用dplyr和tidyr轻松操作此数据。例如,
library(dplyr)
library(tidyr)
data %>%
select(token,
confidence_interval_lower_limit,
confidence_interval_upper_limit) %>%
gather(type, value, -token)
或
interval %>%
spread(type, value) %>%
full_join(limit)
关系数据的两个规则是:
除ID列
外,不要重复任何信息任何单元格都不应包含多条信息