我在R中进行了一些计算,我想将它生成为像这样的excel
DATA1 DATA2
54.364 2.05
56.532
54.21
41.485
65.8745
54.0546
75.156
,而是像这样来了
DATA1 DATA2
54.364 2.05
56.532 2.05
54.21 2.05
41.485 2.05
65.8745 2.05
54.0546 2.05
75.156 2.05
我在excel中生成它的功能是
write.xlsx(c(data.frame(DATA1),data.frame(DATA2)))
虽然data1
的值为54.364,56.532,54.21,41.485,65.8745,54.0546,75.156和data2
2.05
答案 0 :(得分:3)
Excel有一个相当奇怪的"副本"功能,它复制一个函数,将标量返回到调用范围中的每个单元格。这似乎发生在你身上。
解决此问题的一种方法是在直接调用的函数顶部使用Application.Caller
。这将返回表示调用范围的Range
对象。然后,您可以使用#N/A
填充函数返回值。您可以通过将variant
类型插入到数组VT_ERROR
并将错误值设置为xlErrNa
来实现此目的。您可以使用CVErr(xlErrNa)
一步完成该操作。使用#N/A
填充与Excel对返回数组的函数的超大调用范围的匹配。
答案 1 :(得分:0)
也可以使用以下代码: (在https://stackoverflow.com/questions/25547210/how-to-produce-this-order-in-r中使用@ akrun的数据)
DATA1 <- c(54.364, 56.532, 54.21, 41.845, 65.8745, 54.0546, 75.156)
DATA2 <- 2.05
DATA3 <- c(2.2, 2.4, 2.32)
outdf = data.frame(data1=numeric(), data2=numeric(), data3=numeric())
for(i in 1:length(DATA1)) outdf[i,]=c(DATA1[i],0,0)
for(i in 1:length(DATA2)) outdf$data2[i]=DATA2[i]
for(i in 1:length(DATA3)) outdf$data3[i]=DATA3[i]
outdf
data1 data2 data3
1 54.3640 2.05 2.20
2 56.5320 0.00 2.40
3 54.2100 0.00 2.32
4 41.8450 0.00 0.00
5 65.8745 0.00 0.00
6 54.0546 0.00 0.00
7 75.1560 0.00 0.00
然后你可以使用outdf和write.xlsx。