我想使用具有灵活列数和灵活名称的CJ,例如
J = 3
temp = CJ(paste0('Q', 1) = 0:100)
if(J > 1){
for(j in 2:J){
temp = CJ(temp,paste0('Q', j) = 0:100))
}
}对于任意J。
其中,输出为:
CJ(Q1 = 0:100, Q2 = 0:100, Q3 = 0:100)
Q1 Q2 Q3
1: 0 0 0
2: 0 0 1
3: 0 0 2
4: 0 0 3
5: 0 0 4
---
1030297: 100 100 96
1030298: 100 100 97
1030299: 100 100 98
1030300: 100 100 99
1030301: 100 100 100发布于 2018-12-19 07:53:09
这是do.call的典型案例
temp = do.call(CJ, replicate(J, 0:100, simplify = FALSE))
setnames(temp, paste0('Q', 1:J))
temp
# Q1 Q2 Q3
# 1: 0 0 0
# 2: 0 0 1
# 3: 0 0 2
# 4: 0 0 3
# 5: 0 0 4
# ---
# 1030297: 100 100 96
# 1030298: 100 100 97
# 1030299: 100 100 98
# 1030300: 100 100 99
# 1030301: 100 100 100可以使用setNames和lapply而不是replicate在一行中构建它,但可读性要差得多。setnames几乎是即时的,所以没有效率问题。
https://stackoverflow.com/questions/53842677
复制相似问题