这可能很容易解决.我有一个mat500行×335列的2D矩阵和一个dat120425行的data.frame.该data.frame dat有两列I和J,它是整数索引的行,列的mat.我想将值添加mat到行的行中dat.
这是我的概念失败:
> dat$matval <- mat[dat$I, dat$J]
Error: cannot allocate vector of length 1617278737
Run Code Online (Sandbox Code Playgroud)
(我在Win32上使用R 2.13.1).深入挖掘,我发现我误用了矩阵索引,因为看起来我只得到了一个子矩阵mat,而不是我预期的单维数组值,即:
> str(mat[dat$I[1:100], dat$J[1:100]])
int [1:100, 1:100] 20 1 1 1 20 1 1 1 1 1 ...
Run Code Online (Sandbox Code Playgroud)
我期待着类似的东西int [1:100] 20 1 1 1 20 1 1 1 1 1 ....使用行,列索引索引2D矩阵以获取值的正确方法是什么?
我有一个很大的数据帧,但小例子是这样的:
mydf <- data.frame(A = c(letters[1:10]), M1 = c(11:20), M2 = c(31:40), M3 = c(41:50))
Run Code Online (Sandbox Code Playgroud)
我想转置数据帧并将列1(A)保持为列标题(字母[1:10])作为变量名称.以下是不成功代码的临时试验.
tmydf = data.frame(t(mydf))
names(tmydf) <- tmydf[1,]
Run Code Online (Sandbox Code Playgroud)
谢谢;
我使用plot()超过1百万个数据点,结果非常慢.
有没有办法提高速度,包括编程和硬件解决方案(更多内存,图形卡......)?
存储数据在哪里存储?
我尝试在R中绘制一些数据,y轴标签水平,y轴刻度标签左边.我认为下面的代码可行:
set.seed(1)
n.obs <- 390
vol.min <- .20/sqrt(252 * 390)
eps <- rnorm(n = n.obs, sd = vol.min)
mar.default <- c(5,4,4,2) + 0.1
par(mar = mar.default + c(0, 4, 0, 0)) # add space to LHS of plot
pdf("~/myplot.pdf", width=5.05, height=3.8)
plot(eps, main = "Hello World!", las=1, ylab="") # suppress the y-axis label
mtext(text="eps", side=2, line=4, las=1) # add horiz y-axis label
# 4 lines into the margin
Run Code Online (Sandbox Code Playgroud)

相反,正如您所看到的,y轴标签几乎完全落在图形窗口之外.无论我扩大LHS边际多少,这种现象仍然存在.
问:我做错了什么?我需要对oma参数做些什么吗?我需要做什么来按照我的意图来绘制事物?所有这些让我有点不知所措!
我无法找出正确的方式来定义的[,$和[[子集运营商的S4类.
任何人都可以为我提供一个为S4类定义这三个的基本示例吗?
在R中,是否可以在不首先将该向量分配给变量名的情况下为向量的组件指定名称?通常的方法很明显:
z <- 1:3
names(z) <- c("a", "b", "c") #normal way
names(1:3) <- c("a", "b", "c") #throws an error
Run Code Online (Sandbox Code Playgroud)
第二种方式抛出"名称错误(1:3)< - c("a","b","c"):赋值目标扩展为非语言对象"
根据文档,表达式被评估为
z <- "names<-"(z,
"[<-"(names(z), 3, "c2"))’.
Run Code Online (Sandbox Code Playgroud)
所以没有震惊它不起作用,我只是想知道是否有一个解决方案.
理想情况下,有这样的东西是很好的:
names(z <- 1:3) <- c("a", "b", "c")
> z
a b c
1 2 3
Run Code Online (Sandbox Code Playgroud)
只是浪费空间把它放在两条不同的线上.
当尝试cor()在稀疏矩阵(dgCMatrix或dgTMatrix类型)上运行该函数时,我收到以下错误:
Error in cor(x) : supply both 'x' and 'y' or a matrix-like 'x'
Run Code Online (Sandbox Code Playgroud)
将我的矩阵转换为密集将是非常低效的.有没有一种简单的方法来计算这种相关性(没有所有对循环?).
谢谢,
我用ggplot2创建了一对漂亮的概率密度函数,如下所示:
require(ggplot2)
set.seed(2)
data <- rbind( data.frame(type="a", lr=rnorm(100)), data.frame(type="b", lr=rnorm(100,.5,1.2)))
m <- ggplot(data, aes(x=lr))
m <- m + geom_density(aes(fill=factor(type)), size=2, alpha=.4)
m
Run Code Online (Sandbox Code Playgroud)
这会产生一个很好的情节:

但是我真的希望那个情节有不同的颜色阴影.我似乎无法弄明白.我认为以下内容可行:
m + scale_colour_manual( values = c("red","blue"))
Run Code Online (Sandbox Code Playgroud)
但没有运气.我也尝试将填充颜色传递给geom_density()调用,但无济于事.
如何更改填充颜色?
我已经四处寻找,但一直无法找到答案.我想做一个加权的geom_bar图,用垂直线覆盖,显示每个面的整体加权平均值.我无法做到这一点.垂直线似乎是应用于所有方面的单个值.
require('ggplot2')
require('plyr')
# data vectors
panel <- c("A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","B")
instrument <-c("V1","V2","V1","V1","V1","V2","V1","V1","V2","V1","V1","V2","V1","V1","V2","V1")
cost <- c(1,4,1.5,1,4,4,1,2,1.5,1,2,1.5,2,1.5,1,2)
sensitivity <- c(3,5,2,5,5,1,1,2,3,4,3,2,1,3,1,2)
# put an initial data frame together
mydata <- data.frame(panel, instrument, cost, sensitivity)
# add a "contribution to" vector to the data frame: contribution of each instrument
# to the panel's weighted average sensitivity.
myfunc <- function(cost, sensitivity) {
return(cost*sensitivity/sum(cost))
}
mydata <- ddply(mydata, .(panel), transform, contrib=myfunc(cost, sensitivity))
# two views of each panels weighted average; should be the same numbers either way …Run Code Online (Sandbox Code Playgroud)