我想拿出一个变种mapply(称它为xapply现在),它结合了功能(在某种程度上)的expand.grid和mapply.也就是说,对于一个功能FUN和参数列表L1,L2,L3,...的长度未知,但应该产生长度的列表n1*n2*n3(其中,ni是列表的长度i),这是施加的结果FUN到的元素的所有组合名单.
如果expand.grid用于生成列表而不是数据框列表,则可以使用它,但我记得列表可能是不一定适合数据框的事物列表.
如果有三个要扩展的列表,这个功能可以正常工作,但我很好奇一个更通用的解决方案.(FLATTEN未使用,但我可以想象这FLATTEN=FALSE将生成嵌套列表而不是单个列表...)
xapply3 <- function(FUN,L1,L2,L3,FLATTEN=TRUE,MoreArgs=NULL) {
retlist <- list()
count <- 1
for (i in seq_along(L1)) {
for (j in seq_along(L2)) {
for (k in seq_along(L3)) {
retlist[[count]] <- do.call(FUN,c(list(L1[[i]],L2[[j]],L3[[k]]),MoreArgs))
count <- count+1
}
}
}
retlist
}
Run Code Online (Sandbox Code Playgroud)
编辑:忘了返回结果.有人可能通过combn在那里制作一份指数清单来解决这个问题......
我想在1x3布局中绘制三个图形.只有第一个图形需要有垂直轴标签,但我希望所有三个绘图区域的大小完全相同.如果没有或所有图表都有轴标签,这将没有问题.但是,当一个有轴标签而另外两个没有时,如何让所有三个图形大小相同?我试图在基本图形中执行此操作,因为这是我最熟悉的,但如果它们提供更好的方法来解决我的问题,我会很乐意使用grid或ggplot2.
这是一些假数据,我的绘图代码和情节本身:
# Fake Data
data = structure(list(y1 = 1:5, y2 = c(1.2, 2.4, 3.6, 4.8, 6), y3 = c(1.44,
2.88, 4.32, 5.76, 7.2)), .Names = c("y1", "y2", "y3"),
row.names = c("I needed 12 units for financial aid",
"I couldn't find any other open classes",
"I might be adding a major or minor",
"The class seemed interesting", "The class fit into my schedule"
), class = "data.frame")
# Plotting code
par(mar=c(5,15,4,1))
par(mfrow=c(1,3))
barplot(data$y1,names.arg=row.names(data), horiz=TRUE,las=1, +
xlim=c(0,8), main="Group 1")
par(mar=c(5,1,4,1))
barplot(data$y2,names.arg=row.names(data), …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种计算两个大矩阵的Kronecker积的有效方法.我尝试过使用kronecker()如下方法:
I = diag(700)
data = replicate(15, rnorm(120))
test = kronecker(I,data)
Run Code Online (Sandbox Code Playgroud)
但是,执行需要很长时间,然后给出以下错误:
Error: cannot allocate vector of size 6.8 Gb
Run Code Online (Sandbox Code Playgroud) 假设我有一个DNA序列.我想得到它的补充.我使用了以下代码,但我没有得到它.我究竟做错了什么 ?
s=readline()
ATCTCGGCGCGCATCGCGTACGCTACTAGC
p=unlist(strsplit(s,""))
h=rep("N",nchar(s))
unlist(lapply(p,function(d){
for b in (1:nchar(s)) {
if (p[b]=="A") h[b]="T"
if (p[b]=="T") h[b]="A"
if (p[b]=="G") h[b]="C"
if (p[b]=="C") h[b]="G"
}
Run Code Online (Sandbox Code Playgroud) 所以我试图找出这个功能的aperm()作用.当我这样做aperm(a),a矩阵在哪里,我得到它的转置; 我明白了.但是这个功能怎么样:
aperm(a,c(3,1:2))
Run Code Online (Sandbox Code Playgroud)
这是做什么的?when a是6*7矩阵时,此命令不起作用.
我也不理解R的例子.
我想知道如何约束某些参数lm()以获得正系数.有一些包或函数(例如display)可以使所有系数和拦截为正.
例如,在这个例子中,我只想强迫x1并x2具有正系数.
x1=c(NA,rnorm(99)*10)
x2=c(NA,NA,rnorm(98)*10)
x3=rnorm(100)*10
y=sin(x1)+cos(x2)-x3+rnorm(100)
lm(y~x1+x2+x3)
Call:
lm(formula = y ~ x1 + x2 + x3)
Coefficients:
(Intercept) x1 x2 x3
-0.06278 0.02261 -0.02233 -0.99626
Run Code Online (Sandbox Code Playgroud)
我试过功能nnnpls()包nnls,它可以轻松控制系数符号.遗憾的是,由于数据中的NA问题,我无法使用它,因为此函数不允许NA.
我看到函数NA可用于应用约束但我无法使其工作.
有人能让我知道我该怎么办?
当我尝试加载'car'包时出现此错误:
library(car)
Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]) :
namespace 'nlme' 3.1-122 is already loaded, but >= 3.1.123 is required
Error: package or namespace load failed for 'car'
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时update.packages(),没有什么可以更新的.如果重要的话,我正在使用MRO 3.2.3.
我有两个点(5,0.45)和(6,0.50)并且需要通过线性插值找到x = 5.019802时的值
但是如何在R中编码呢?
我得到了下面的代码,但只是得到一个图表insdeed.
x <- c(5,6)
y <- c(0.45,0.50)
interp <- approx(x,y)
plot(x,y,pch=16,cex=2)
points(interp,col='red')
Run Code Online (Sandbox Code Playgroud) 首先 - 我是编程和R的初学者,所以请原谅我这是一个愚蠢的问题.我在查看由以下代码生成的tibble中的十多行时遇到问题.
下面的代码旨在找到书中最常见的单词.我得到了我想要的结果,但是如何查看超过10行的数据.据我所知,它不会被保存为我可以调用的数据框架.
library(dplyr)
tidy_books %>%
anti_join(stop_words) %>%
count(word, sort=TRUE)
Joining, by = "word"
# A tibble: 3,397 x 2
word n
<chr> <int>
1 alice 820
2 queen 247
3 time 141
4 king 122
5 head 112
6 looked 100
7 white 97
8 round 96
9 voice 86
10 tone 81
# ... with 3,387 more rows
Run Code Online (Sandbox Code Playgroud) 当我通过我们的公司网络访问文件时,我遇到了一些R问题变得非常迟缓的问题.所以,我回落,并做了一些测试,我感到非常震惊地发现,将R file.copy()命令MUCH比使用等效文件拷贝速度较慢system(mv ...).这是一个已知问题还是我在这里做错了什么?
这是我的测试:
我有3个文件:
large_random.txt - ~100MB medium_random.txt - ~10MB small_random.txt - ~1 MB我在我的Mac上创建了这些:
dd if=/dev/urandom of=small_random.txt bs=1048576 count=1
dd if=/dev/urandom of=medium_random.txt bs=1048576 count=10
dd if=/dev/urandom of=large_random.txt bs=1048576 count=100
Run Code Online (Sandbox Code Playgroud)
但是以下R测试都是使用在虚拟机中运行的Windows完成的.J驱车是当地的,N驱车距离酒店有700英里.
library(tictoc)
test_copy <- function(source, des){
tic('r file.copy')
file.remove(des)
file.copy(source, des )
toc()
tic('system call')
system(paste('rm', des, sep=' '))
system(paste('cp', source, des, sep=' '))
toc()
}
source <- 'J:\\tidy_examples\\dummyfiles\\small_random.txt'
des <- 'N:\\JAL\\2018\\_temp\\small_random.txt'
test_copy(source, des)
source <- 'J:\\tidy_examples\\dummyfiles\\medium_random.txt'
des <- 'N:\\JAL\\2018\\_temp\\medium_random.txt'
test_copy(source, des)
source <- …Run Code Online (Sandbox Code Playgroud)