我有以下代码: model $ data
model$data
[[1]]
Category1 Category2 Category3 Category4
3555 1 0 0 0
6447 1 0 0 0
5523 1 0 1 0
7550 1 0 1 0
6330 1 0 1 0
2451 1 0 0 0
4308 1 0 1 0
8917 0 0 0 0
4780 1 0 1 0
6802 1 0 1 0
2021 1 0 0 0
5792 1 0 1 0
5475 1 0 1 0
4198 1 0 0 0
223 1 0 1 0
4811 1 0 1 0
678 1 0 1 0
我正在尝试使用此公式来获取列名称的索引:
sample(colnames(model$data), 1)
但是我收到以下错误消息:
Error in sample.int(length(x), size, replace, prob) :
invalid first argument
有没有办法避免这个错误?
答案 0 :(得分:2)
请注意这个?
model$data [[1]]
[[1]]
表示model$data
是列表,其第一个组件是数据框。要对其执行任何操作,您需要将model$data[[1]]
传递给您的代码,而不是model$data
。
sample(colnames(model$data[[1]]), 1)
答案 1 :(得分:1)
这似乎是Random rows in dataframes in R的近似重复,应该可以作为重复关闭。但为了完整起见,对采样列索引的答案进行调整是微不足道的:
1:ncol(df)
代替1:nrow(df)
然后将这些列索引放在df[, ...]
df[, sample(ncol(df), 1)]
1是因为你显然想拍摄1号样本。
一个小的复杂因素是您的数据帧是model$data[[1]]
,因为您的模型$ data看起来像一个列表,其中一个元素是数据帧,而不是普通的数据帧。首先,分配df <- model$data[[1]]
最后,如果你真的想要采样的列名和它们的索引:
samp_col_idxs <- sample(ncol(df), 1)
samp_col_names <- colnames(df) [samp_col_idxs]