小编Ric*_*son的帖子

如何获取列表中每个元素的第二个子元素

我知道我之前遇到过这个问题,但此刻我有一点精神障碍.因为我在SO上找不到它,我会在这里发布,所以我可以在下次找到它.

我有一个数据框,其中包含一个表示ID标签的字段.此标签有两个部分,alpha前缀和数字后缀.我想将它拆开并创建两个具有这些值的新字段.

structure(list(lab = c("N00", "N01", "N02", "B00", "B01", "B02", 
"Z21", "BA01", "NA03")), .Names = "lab", row.names = c(NA, -9L
), class = "data.frame")

df$pre<-strsplit(df$lab, "[0-9]+")
df$suf<-strsplit(df$lab, "[A-Z]+")
Run Code Online (Sandbox Code Playgroud)

这使

   lab pre  suf
1  N00   N , 00
2  N01   N , 01
3  N02   N , 02
4  B00   B , 00
5  B01   B , 01
6  B02   B , 02
7  Z21   Z , 21
8 BA01  BA , 01
9 NA03  NA , 03
Run Code Online (Sandbox Code Playgroud)

所以,第一个strsplit工作正常,但第二个提供了一个列表,每个都有两个元素,一个空字符串和我想要的结果,并将它们填充到dataframe列中.

如何从列表的每个元素中选择第二个子元素?(或者,有没有更好的方法来做到这一点)

r

57
推荐指数
2
解决办法
5万
查看次数

ggplot2:调整图例中的符号大小

我该如何更改图例中符号的大小?我检查了文件,theme但没有找到答案.

这是一个例子:

library(ggplot2);library(grid)
set.seed(1000)
x <- 1:6
mu <- sin(x)
observed <- mu + rnorm(length(x), 0, 0.5*sd(mu))
data <- data.frame(
  t=rep(x, 2), 
  value=c(mu, observed) - min(mu, observed) + 0.5, 
  class = rep(c("mu", "observed"), each=length(x)))
mu <- data$value[1:length(x)]
observed <- data$value[1:length(x) + length(x)]
mu.min <- mu - 3 * 0.5 * sd(mu)
mu.max <- mu + 3 * 0.5 * sd(mu)
g <- ggplot(data=data)
g <- g + geom_point(aes(x=value, y=t, shape=class, size=24)) + scale_size(guide="none")
g <- g + scale_shape(name="", …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

49
推荐指数
5
解决办法
5万
查看次数

如何将列添加到numpy数组

我试图添加一列到从中创建的数组recfromcsv.在这种情况下,它是一个数组:( [210,8]rows,cols).

我想添加第九列.空或用零并不重要.

from numpy import genfromtxt
from numpy import recfromcsv
import numpy as np
import time

if __name__ == '__main__':
 print("testing")
 my_data = recfromcsv('LIAB.ST.csv', delimiter='\t')
 array_size = my_data.size
 #my_data = np.append(my_data[:array_size],my_data[9:],0)

 new_col = np.sum(x,1).reshape((x.shape[0],1))
 np.append(x,new_col,1)
Run Code Online (Sandbox Code Playgroud)

python numpy

40
推荐指数
2
解决办法
18万
查看次数

您是使用attach()还是通过名称或切片调用变量?

许多介绍R书和指南都是从附加a的练习开始的,data.frame这样你就可以通过名字来调用变量.我总是发现用$符号或方括号切片调用变量是有利的[,2].这样我可以使用多个data.frames而不会混淆它们和/或使用迭代来连续调用感兴趣的列.我注意到Google最近公布了R的编码指南,其中包括该行

1)附:避免使用它

人们如何看待这种做法?

coding-style r

26
推荐指数
4
解决办法
1万
查看次数

cor.test()的矩阵版本

Cor.test()采用向量xy参数,但我有一整个数据矩阵,我想成对测试.Cor()把这个矩阵作为一个参数就好了,我希望找到一种方法来做同样的事情cor.test().

其他人的共同建议似乎是使用cor.prob():

https://stat.ethz.ch/pipermail/r-help/2001-November/016201.html

但是这些p值与cor.test()!!! 生成的p值不同 Cor.test()也似乎更适合处理成对删除(我的数据集中有相当多的缺失数据)cor.prob().

有没有人有其他选择cor.prob()?如果解决方案涉及嵌套for循环,那么就是它(我已经足够新了,R因为即使这对我来说也是有问题的).

r correlation

25
推荐指数
4
解决办法
3万
查看次数

反应条件渲染模式

我已经实现了一个模态组件,在屏幕上显示模式对话框.通常,模态将有条件地显示.我可以通过两种方式在render函数中执行此操作:

render(){
    ...
    <Modal show={this.state.showModal}>
        // something in modal
    </Modal>
}
Run Code Online (Sandbox Code Playgroud)

在Modal组件中,我使用this.props.show为自己添加一个不同的类.如果为false,则会添加display:none来隐藏模态.

另一种方式是这样的:

render(){
    ...
    { this.state.showModal &&
        (<Modal>
            // something in modal
        </Modal>)
    }
}
Run Code Online (Sandbox Code Playgroud)

这用于showModal决定是否在渲染中添加模态.

我想弄清楚的是:

  1. 这两种方式有什么不同?
  2. 其中一个比另一个好吗?
  3. 还有另一种方法吗?

编辑:似乎不同的人有不同的偏好.对我来说,我更喜欢@ErikTheDeveloper所说的.显示/隐藏模态的功能应该保留在模态中,当我们不需要显示模态时,我们可以在模态中返回null.

我想也许没有一个答案,哪种方式更好.也许这只是个人选择?

javascript reactjs

20
推荐指数
3
解决办法
3614
查看次数

c99中的静态struct初始化

GCCc99/gnu99模式中使用复合文字进行静态结构初始化时,我遇到了一个奇怪的行为.

显然这很好:

struct Test
{
    int a;
};

static struct Test tt = {1}; /* 1 */
Run Code Online (Sandbox Code Playgroud)

但是,这不是:

static struct Test tt = (struct Test) {1}; /* 2 */
Run Code Online (Sandbox Code Playgroud)

这会触发以下错误:

初始化元素不是常量

这也无济于事:

static struct Test tt = (const struct Test) {1}; /* 3 */
Run Code Online (Sandbox Code Playgroud)

我确实理解静态结构的初始化值应该是编译时常量.但我不明白为什么这个最简单的初始化表达式不再被认为是常量?这是由标准定义的吗?

我问的原因是我在gnu90模式下遇到了一些用GCC编写的遗留代码,它使用了这种复合文字结构进行静态结构初始化(2).显然,这是当时的GNU扩展,后来被C99采用.

现在,它导致在与成功编译的代码GNU90不能与没有被编译C99,甚至也不是GNU99.

他们为什么要这样对我?

c gcc struct compound-literals

16
推荐指数
2
解决办法
3912
查看次数

R中的双For循环

你如何for在R中正确编写双循环?

例如,在CI中会这样做

int i, j;
for (i = 1; i < 6; i++) {
    for (j=i; j <= 3; j++) {
        printf("%i,%i\n",i,j);
    }
    // Do more operations for i > 3...
}
Run Code Online (Sandbox Code Playgroud)

这将生成(人工)序列:

1,1
1,2
1,3
2,2
2,3
3,3
Run Code Online (Sandbox Code Playgroud)

在R中,写入时不会出现相同的行为

for (i in 1:6) {
    for (j in i:3) {
        print(paste(i,j,sep=","))
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我已经沦落到做类似的事情

for (i in 1:6) {
    j <- i
    while (j <= 3) {
        print(paste(i,j,sep=","))
        j <- j+1
    }
}       
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

正如Shane所说,也许我应该说清楚:我对代码式数学匹配特别感兴趣,以便学生更容易理解.看来学生们最熟悉的是for循环.

特别是,我希望我的学生模拟 …

loops r

12
推荐指数
3
解决办法
8万
查看次数

在data.table中使用:= with paste()

我已经开始使用data.table大型人口模型.到目前为止,我印象深刻,因为使用data.table结构会使我的模拟运行时间缩短约30%.我正在尝试进一步优化我的代码并包含一个简化的示例.我的两个问题是:

  1. 是否可以使用:=此代码的运算符?
  2. 使用:=操作员会更快(但是,如果我能够回答我的第一个问题,我应该能够回答我的问题2!)?

我在运行Windows 7 data.table版本1.9.4 的计算机上使用R版本3.1.2 .

这是我可重复的例子:

library(data.table)

## Create  example table and set initial conditions
nYears = 10
exampleTable = data.table(Site = paste("Site", 1:3))
exampleTable[ , growthRate := c(1.1, 1.2, 1.3), ]
exampleTable[ , c(paste("popYears", 0:nYears, sep = "")) := 0, ]

exampleTable[ , "popYears0" := c(10, 12, 13)] # set the initial population size

for(yearIndex in 0:(nYears - 1)){
    exampleTable[[paste("popYears", yearIndex + 1, sep = "")]] <- 
    exampleTable[[paste("popYears", yearIndex, …
Run Code Online (Sandbox Code Playgroud)

r data.table

10
推荐指数
1
解决办法
3210
查看次数

修改lm或loess函数以在ggplot2的geom_smooth中使用它

我需要修改lm(或最终loess)函数,以便我可以在ggplot2 geom_smooth(或stat_smooth)中使用它.

例如,这是stat_smooth通常使用的方式:

> qplot(data=diamonds, carat, price, facets=~clarity) + stat_smooth(method='lm')`
Run Code Online (Sandbox Code Playgroud)

我想定义一个自定义lm2函数作为method参数的值stat_smooth,所以我可以自定义它的行为.

> lm2 <- function(formula, data, ...)
  {
      print(head(data))
      return(lm(formula, data, ...))
  }
> qplot(data=diamonds, carat, price, facets=~clarity) + stat_smooth(method='lm2')
Run Code Online (Sandbox Code Playgroud)

请注意,我已将其用作method='lm2'参数stat_smooth.当我执行此代码时,获取错误:

eval中的错误(expr,envir,enclos):'nthcdr'需要一个列表来降低CDR

我不太懂.lm2在外面运行时,该方法非常有效stat_smooth.我玩了一下,我有不同类型的错误,但由于我不熟悉R的调试工具,我很难调试它们.老实说,我没有得到我应该把它放在return()电话里面.

r ggplot2 lm

9
推荐指数
1
解决办法
2502
查看次数