Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何初始化空数据帧,其中列数取决于R中的多个输入参数_R_List_Function_Loops - Fatal编程技术网

如何初始化空数据帧,其中列数取决于R中的多个输入参数

如何初始化空数据帧,其中列数取决于R中的多个输入参数,r,list,function,loops,R,List,Function,Loops,我需要创建一个长度可变的空data.table。例如,我将得到n=2amdm=12,然后我希望表中有如下列: name, ID, nickname, start_1, start_2, count_1, count_2, value_<n>_month_<m> 借来的 但是如何为列名称中同时包含n和m的变量创建列 有没有更好的方法来实现我已经拥有的 您可以使用: n = 2 m = 12 const_col <- c('name', 'ID', 'nicknam

我需要创建一个长度可变的空data.table。例如,我将得到
n=2
amd
m=12
,然后我希望表中有如下列:

name, ID, nickname, start_1, start_2, count_1, count_2, value_<n>_month_<m>
借来的

但是如何为列名称中同时包含
n
m
的变量创建列

有没有更好的方法来实现我已经拥有的

您可以使用:

n = 2
m = 12

const_col <- c('name', 'ID', 'nickname')
sc_cols <- c(t(outer(c('start', 'count'), seq_len(n),paste0)))
vm_cols <- c(t(outer(seq_len(n), seq_len(m), function(x, y) 
                  sprintf('value_%d_month_%d', x, y))))
all_cols <- c(const_col, sc_cols, vm_cols)

NewTable <- data.table::data.table(matrix(ncol = length(all_cols), 
                         dimnames = list(NULL, all_cols)))

我得到一个只有一行(全部NA)的表,所有列都是logiYes类的,那么您希望输出什么呢?我只是很惊讶,我想出于某种原因,我希望使用空字符串。他们为什么选择logi有什么原因吗?像默认设置一样?我们没有初始化矩阵中的任何值,默认情况下,
NA
值和
class(NA)
是符合逻辑的。您可以有任何想要的值,例如,要获取空字符串值,可以执行以下操作:
data.table::data.table(矩阵(“”,ncol=length(all_cols),dimnames=list(NULL,all_cols))
,将
'
替换为
NA_整数
NA_字符
以获取整数和字符列。
n = 2
m = 12

const_col <- c('name', 'ID', 'nickname')
sc_cols <- c(t(outer(c('start', 'count'), seq_len(n),paste0)))
vm_cols <- c(t(outer(seq_len(n), seq_len(m), function(x, y) 
                  sprintf('value_%d_month_%d', x, y))))
all_cols <- c(const_col, sc_cols, vm_cols)

NewTable <- data.table::data.table(matrix(ncol = length(all_cols), 
                         dimnames = list(NULL, all_cols)))
names(NewTable)
# [1] "name"             "ID"               "nickname"        
# [4] "start1"           "start2"           "count1"          
# [7] "count2"           "value_1_month_1"  "value_1_month_2" 
#[10] "value_1_month_3"  "value_1_month_4"  "value_1_month_5" 
#[13] "value_1_month_6"  "value_1_month_7"  "value_1_month_8" 
#[16] "value_1_month_9"  "value_1_month_10" "value_1_month_11"
#[19] "value_1_month_12" "value_2_month_1"  "value_2_month_2" 
#[22] "value_2_month_3"  "value_2_month_4"  "value_2_month_5" 
#[25] "value_2_month_6"  "value_2_month_7"  "value_2_month_8" 
#[28] "value_2_month_9"  "value_2_month_10" "value_2_month_11"
#[31] "value_2_month_12"